⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 picodriver.java

📁 picoSQL is a SQL-based, multi-user, client/server RDBMS, released under the GPL
💻 JAVA
字号:
/*_____       _    _    Corso   Italia,  178(_|__   .  (_   |_|_  56125           Pisa(_|_) |)|(()_)()| |   tel.  +39  050 46380  |   |               picosoft@picosoft.it Copyright (C) Picosoft s.r.l. 1995-2002 This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.*/package IT.picosoft.jdbc;// import java.security.AccessController;import java.sql.*;import java.util.*;// import sun.security.action.GetPropertyAction;public class PicoDriver implements Driver{    protected static PicoDbApi odbcApi;    protected static int hEnv;    protected static Hashtable connectionList;    static {        if (DriverManager.getLogWriter() != null)           DriverManager.println("picoDB driver class loaded");        PicoDriver drv = new PicoDriver();        try {            DriverManager.registerDriver(drv);        } catch(SQLException ex) {            if(DriverManager.getLogWriter() != null)                DriverManager.println("Unable to register driver:" + ex);        }    }    public PicoDriver() {        odbcApi = null;        hEnv = 0;        connectionList = new Hashtable();    }    public void closeConnection (OdbcConnection odbcCon) throws SQLException {      odbcCon.close();      Object debug = connectionList.remove(odbcCon);      if (connectionList.size() == 0 && hEnv != 0) {         odbcApi.SQLFreeEnv(hEnv);         hEnv = 0;      }   }   public synchronized Connection connect(String url, Properties info)                                          throws SQLException {      if (DriverManager.getLogWriter() != null)         DriverManager.println("*PicoDriver.connect (" + url + ") nConn=" +                               connectionList.size());      if (!acceptsURL(url))         return null;      if(!initialize()) {         return null;      } else {         PicoConnection conn = new PicoConnection(hEnv, this);         conn.initialize(getSubName(url),info,DriverManager.getLoginTimeout());         conn.setURL(url);         connectionList.put(conn.getHDBC(), new Integer(hEnv));         return conn;      }   }   public Hashtable getAttributeProperties(String s) {      int i = 0;      boolean flag = false;      int j1 = 0;      Hashtable hashtable = new Hashtable();      int j;      for (int k1 = s.length(); i < k1; i = j + 1) {         boolean flag1 = true;         String s2 = null;         String s3 = null;         String as[] = null;         String s4 = null;         j = s.indexOf(";", i);         if (j < 0)            j = k1 + 1;         String s1 = s.substring(i, j);         int k = 0;         int l = s1.indexOf(":", 0);         int i1 = s1.indexOf("=", 0);         if (s1.startsWith("*")) {            flag1 = false;            k++;         }         if (l > 0)            s2 = s1.substring(k, l);         if (l > 0 && i1 > 0)            s3 = s1.substring(l + 1, i1);         if (i1 > 0) {            s4 = s1.substring(i1 + 1);            if (s4.equals("?"))               s4 = null;         }         if (s4 != null && s4.startsWith("{")) {            as = listToArray(s4);            s4 = null;         }         DriverPropertyInfo driverpropertyinfo = new DriverPropertyInfo(s2, s4);         driverpropertyinfo.description = s3;         driverpropertyinfo.required = flag1;         driverpropertyinfo.choices = as;         hashtable.put(new Integer(j1), driverpropertyinfo);         j1++;      }      return hashtable;   }   public int getMajorVersion() {      return 1;   }   public int getMinorVersion() {      return 2;   }   public DriverPropertyInfo[] getPropertyInfo(String url, Properties info)                   throws SQLException {      if (DriverManager.getLogWriter() != null)         DriverManager.println("*PicoDriver.getPropertyInfo (" + url + ")");      if(!acceptsURL(url))         return null;      if(!initialize())         return null;      return new DriverPropertyInfo[0];   }   public static String getProtocol(String s) {      String s1 = "";      int i = s.indexOf(':');      if (i >= 0)         s1 = s.substring(0, i);      return s1;   }   public static String getSubName(String s) {      String s1 = "";      int i = s.indexOf(':');      if (i >= 0) {         int j = s.indexOf(':', i + 1);         if (j >= 0)            s1 = s.substring(j + 1);      }      return s1;   }   public static String getSubProtocol(String s) {      String s1 = "";      int i = s.indexOf(':');      if (i >= 0) {         int j = s.indexOf(':', i + 1);         if (j >= 0)            s1 = s.substring(i + 1, j);       }       return s1;   }   private boolean initialize() throws SQLException {      boolean Return = true;      if (odbcApi == null)         try {            odbcApi = new PicoDbApi ();         } catch(Exception ex) {            if (DriverManager.getLogWriter() != null)               DriverManager.println("Unable to load PicoDbApi library:" + ex);            Return = false;         }      if (hEnv == 0)         try {            hEnv = odbcApi.SQLAllocEnv();         } catch(Exception ex) {            if (DriverManager.getLogWriter() != null)               DriverManager.println("Unable to allocate environment:" + ex);            Return = false;         }      return Return;   }   public boolean jdbcCompliant() {      return true;   }   public boolean acceptsURL(String url) {      if (DriverManager.getLogWriter() != null) {         DriverManager.println("acc. url=" + url);         DriverManager.println("acc. prt=" + getProtocol(url));         DriverManager.println("acc. sub=" + getSubProtocol(url));      }      return  getProtocol(url).equalsIgnoreCase("jdbc") &&              getSubProtocol(url).equalsIgnoreCase("picoDB");   }   protected static String[] listToArray(String s) {      String as[] = null;      Hashtable hashtable = new Hashtable();      int i = 0;      int j = 1;      boolean flag = true;      int i1 = s.length();      if (!s.startsWith("{"))         return null;      if (!s.endsWith("}"))         return null;      int l;      for (; j < i1; j = l + 1) {         l = s.indexOf(",", j);         if (l < 0)            l = i1 - 1;         String s1 = s.substring(j, l);         hashtable.put(new Integer(i), s1);         i++;      }      as = new String[i];      for (int k = 0; k < i; k++) {         String s2 = (String)hashtable.get(new Integer(k));         as[k] = s2;      }      return as;   }   protected static String makeConnectionString(Properties properties) {      String s = "";      for (Enumeration enumeration = properties.propertyNames();                      enumeration.hasMoreElements(); ) {         String s1 = (String)enumeration.nextElement();         String s2 = properties.getProperty(s1);         if (s1.equalsIgnoreCase("user"))            s1 = "UID";         if (s1.equalsIgnoreCase("password"))            s1 = "PWD";         if (s2 != null)            s = s + ";" + s1 + "=" + s2;       }       return s;   }}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -