1*fd76c71bSTreehugger Robot package SQLite; 2*fd76c71bSTreehugger Robot 3*fd76c71bSTreehugger Robot import java.sql.*; 4*fd76c71bSTreehugger Robot import java.util.Properties; 5*fd76c71bSTreehugger Robot 6*fd76c71bSTreehugger Robot public class JDBCDriver implements java.sql.Driver { 7*fd76c71bSTreehugger Robot 8*fd76c71bSTreehugger Robot public static final int MAJORVERSION = 1; 9*fd76c71bSTreehugger Robot 10*fd76c71bSTreehugger Robot public static boolean sharedCache = false; 11*fd76c71bSTreehugger Robot 12*fd76c71bSTreehugger Robot public static String vfs = null; 13*fd76c71bSTreehugger Robot 14*fd76c71bSTreehugger Robot private static java.lang.reflect.Constructor makeConn = null; 15*fd76c71bSTreehugger Robot 16*fd76c71bSTreehugger Robot protected Connection conn; 17*fd76c71bSTreehugger Robot 18*fd76c71bSTreehugger Robot static { 19*fd76c71bSTreehugger Robot try { 20*fd76c71bSTreehugger Robot Class connClass = null; 21*fd76c71bSTreehugger Robot Class args[] = new Class[5]; 22*fd76c71bSTreehugger Robot args[0] = Class.forName("java.lang.String"); 23*fd76c71bSTreehugger Robot args[1] = args[0]; 24*fd76c71bSTreehugger Robot args[2] = args[0]; 25*fd76c71bSTreehugger Robot args[3] = args[0]; 26*fd76c71bSTreehugger Robot args[4] = args[0]; 27*fd76c71bSTreehugger Robot String jvers = java.lang.System.getProperty("java.version"); 28*fd76c71bSTreehugger Robot String cvers; 29*fd76c71bSTreehugger Robot if (jvers == null || jvers.startsWith("1.0")) { 30*fd76c71bSTreehugger Robot throw new java.lang.Exception("unsupported java version"); 31*fd76c71bSTreehugger Robot } else if (jvers.startsWith("1.1")) { 32*fd76c71bSTreehugger Robot cvers = "SQLite.JDBC1.JDBCConnection"; 33*fd76c71bSTreehugger Robot } else if (jvers.startsWith("1.2") || jvers.startsWith("1.3")) { 34*fd76c71bSTreehugger Robot cvers = "SQLite.JDBC2.JDBCConnection"; 35*fd76c71bSTreehugger Robot } else if (jvers.startsWith("1.4")) { 36*fd76c71bSTreehugger Robot cvers = "SQLite.JDBC2x.JDBCConnection"; 37*fd76c71bSTreehugger Robot } else if (jvers.startsWith("1.5")) { 38*fd76c71bSTreehugger Robot cvers = "SQLite.JDBC2y.JDBCConnection"; 39*fd76c71bSTreehugger Robot try { 40*fd76c71bSTreehugger Robot Class.forName(cvers); 41*fd76c71bSTreehugger Robot } catch (java.lang.Exception e) { 42*fd76c71bSTreehugger Robot cvers = "SQLite.JDBC2x.JDBCConnection"; 43*fd76c71bSTreehugger Robot } 44*fd76c71bSTreehugger Robot } else { 45*fd76c71bSTreehugger Robot cvers = "SQLite.JDBC2z.JDBCConnection"; 46*fd76c71bSTreehugger Robot try { 47*fd76c71bSTreehugger Robot Class.forName(cvers); 48*fd76c71bSTreehugger Robot } catch (java.lang.Exception e) { 49*fd76c71bSTreehugger Robot cvers = "SQLite.JDBC2y.JDBCConnection"; 50*fd76c71bSTreehugger Robot try { 51*fd76c71bSTreehugger Robot Class.forName(cvers); 52*fd76c71bSTreehugger Robot } catch (java.lang.Exception ee) { 53*fd76c71bSTreehugger Robot cvers = "SQLite.JDBC2x.JDBCConnection"; 54*fd76c71bSTreehugger Robot } 55*fd76c71bSTreehugger Robot } 56*fd76c71bSTreehugger Robot } 57*fd76c71bSTreehugger Robot connClass = Class.forName(cvers); 58*fd76c71bSTreehugger Robot makeConn = connClass.getConstructor(args); java.sql.DriverManager.registerDriver(new JDBCDriver())59*fd76c71bSTreehugger Robot java.sql.DriverManager.registerDriver(new JDBCDriver()); 60*fd76c71bSTreehugger Robot try { 61*fd76c71bSTreehugger Robot String shcache = 62*fd76c71bSTreehugger Robot java.lang.System.getProperty("SQLite.sharedcache"); 63*fd76c71bSTreehugger Robot if (shcache != null && 64*fd76c71bSTreehugger Robot (shcache.startsWith("y") || shcache.startsWith("Y"))) { 65*fd76c71bSTreehugger Robot sharedCache = SQLite.Database._enable_shared_cache(true); 66*fd76c71bSTreehugger Robot } 67*fd76c71bSTreehugger Robot } catch (java.lang.Exception e) { 68*fd76c71bSTreehugger Robot } 69*fd76c71bSTreehugger Robot try { 70*fd76c71bSTreehugger Robot String tvfs = 71*fd76c71bSTreehugger Robot java.lang.System.getProperty("SQLite.vfs"); 72*fd76c71bSTreehugger Robot if (tvfs != null) { 73*fd76c71bSTreehugger Robot vfs = tvfs; 74*fd76c71bSTreehugger Robot } 75*fd76c71bSTreehugger Robot } catch (java.lang.Exception e) { 76*fd76c71bSTreehugger Robot } 77*fd76c71bSTreehugger Robot } catch (java.lang.Exception e) { 78*fd76c71bSTreehugger Robot System.err.println(e); 79*fd76c71bSTreehugger Robot } 80*fd76c71bSTreehugger Robot } 81*fd76c71bSTreehugger Robot JDBCDriver()82*fd76c71bSTreehugger Robot public JDBCDriver() { 83*fd76c71bSTreehugger Robot } 84*fd76c71bSTreehugger Robot acceptsURL(String url)85*fd76c71bSTreehugger Robot public boolean acceptsURL(String url) throws SQLException { 86*fd76c71bSTreehugger Robot return url.startsWith("sqlite:/") || 87*fd76c71bSTreehugger Robot url.startsWith("jdbc:sqlite:/"); 88*fd76c71bSTreehugger Robot } 89*fd76c71bSTreehugger Robot connect(String url, Properties info)90*fd76c71bSTreehugger Robot public Connection connect(String url, Properties info) 91*fd76c71bSTreehugger Robot throws SQLException { 92*fd76c71bSTreehugger Robot if (!acceptsURL(url)) { 93*fd76c71bSTreehugger Robot return null; 94*fd76c71bSTreehugger Robot } 95*fd76c71bSTreehugger Robot Object args[] = new Object[5]; 96*fd76c71bSTreehugger Robot args[0] = url; 97*fd76c71bSTreehugger Robot if (info != null) { 98*fd76c71bSTreehugger Robot args[1] = info.getProperty("encoding"); 99*fd76c71bSTreehugger Robot args[2] = info.getProperty("password"); 100*fd76c71bSTreehugger Robot args[3] = info.getProperty("daterepr"); 101*fd76c71bSTreehugger Robot args[4] = info.getProperty("vfs"); 102*fd76c71bSTreehugger Robot } 103*fd76c71bSTreehugger Robot if (args[1] == null) { 104*fd76c71bSTreehugger Robot args[1] = java.lang.System.getProperty("SQLite.encoding"); 105*fd76c71bSTreehugger Robot } 106*fd76c71bSTreehugger Robot if (args[4] == null) { 107*fd76c71bSTreehugger Robot args[4] = vfs; 108*fd76c71bSTreehugger Robot } 109*fd76c71bSTreehugger Robot try { 110*fd76c71bSTreehugger Robot conn = (Connection) makeConn.newInstance(args); 111*fd76c71bSTreehugger Robot } catch (java.lang.reflect.InvocationTargetException ie) { 112*fd76c71bSTreehugger Robot throw new SQLException(ie.getTargetException().toString()); 113*fd76c71bSTreehugger Robot } catch (java.lang.Exception e) { 114*fd76c71bSTreehugger Robot throw new SQLException(e.toString()); 115*fd76c71bSTreehugger Robot } 116*fd76c71bSTreehugger Robot return conn; 117*fd76c71bSTreehugger Robot } 118*fd76c71bSTreehugger Robot getMajorVersion()119*fd76c71bSTreehugger Robot public int getMajorVersion() { 120*fd76c71bSTreehugger Robot return MAJORVERSION; 121*fd76c71bSTreehugger Robot } 122*fd76c71bSTreehugger Robot getMinorVersion()123*fd76c71bSTreehugger Robot public int getMinorVersion() { 124*fd76c71bSTreehugger Robot return Constants.drv_minor; 125*fd76c71bSTreehugger Robot } 126*fd76c71bSTreehugger Robot getPropertyInfo(String url, Properties info)127*fd76c71bSTreehugger Robot public DriverPropertyInfo[] getPropertyInfo(String url, Properties info) 128*fd76c71bSTreehugger Robot throws SQLException { 129*fd76c71bSTreehugger Robot DriverPropertyInfo p[] = new DriverPropertyInfo[4]; 130*fd76c71bSTreehugger Robot DriverPropertyInfo pp = new DriverPropertyInfo("encoding", ""); 131*fd76c71bSTreehugger Robot p[0] = pp; 132*fd76c71bSTreehugger Robot pp = new DriverPropertyInfo("password", ""); 133*fd76c71bSTreehugger Robot p[1] = pp; 134*fd76c71bSTreehugger Robot pp = new DriverPropertyInfo("daterepr", "normal"); 135*fd76c71bSTreehugger Robot p[2] = pp; 136*fd76c71bSTreehugger Robot pp = new DriverPropertyInfo("vfs", vfs); 137*fd76c71bSTreehugger Robot p[3] = pp; 138*fd76c71bSTreehugger Robot return p; 139*fd76c71bSTreehugger Robot } 140*fd76c71bSTreehugger Robot jdbcCompliant()141*fd76c71bSTreehugger Robot public boolean jdbcCompliant() { 142*fd76c71bSTreehugger Robot return false; 143*fd76c71bSTreehugger Robot } 144*fd76c71bSTreehugger Robot } 145