xref: /aosp_15_r20/external/javasqlite/src/main/java/SQLite/JDBCDriver.java (revision fd76c71b147b98c03334ec0945352cee0b39aab1)
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