Cool, thanks.
Quote:
|
The only problem is then doing the connection as the DriverManager will refuse to use a driver that was loaded by a different classloader.
|
While I was awaiting your reply, I thought I would have a go at it myself. For what it is worth, the following also works. So the "standard method" of connecting to a database (via DriverManager) seems to work now (at least for my JDBC driver).
As mentioned I'm working in Java 6.0.
// For some reason my driver is in three parts
URL jdbc1 = new URL ("file:/classpath/jars/JDBC/tdgssconfig.jar");
URL jdbc2 = new URL ("file:/classpath/jars/JDBC/tdgssjava.jar");
URL jdbc3 = new URL ("file:/classpath/jars/JDBC/terajdbc4.jar");
// Either of the following seem to work.
// ClassLoader loader = new URLClassLoader (new URL [] { path, jdbc1, jdbc2, jdbc3 }, this.getClass().getClassLoader());
ClassLoader loader = new URLClassLoader (new URL [] { path, jdbc1, jdbc2, jdbc3 });
Class jdbcClass = loader.loadClass ("com.ncr.teradata.TeraDriver");
// The following is required otherwise I get a "No suitable driver" SQLException.
Object jdbcDriver = jdbcClass.newInstance ();
Connection c = DriverManager.getConnection("jdbc:teradata://dbc/", "uid", "pass");
Statement s = c.createStatement();
ResultSet r = s.executeQuery("select * from t1;");
while (r.next()) {
System.out.println (r.getString(1) + ", " + r.getString (2));
}
r.close ();
s.close ();
c.close ();
Thanks again for your post Thomas, it really helped point me in the right direction.
Glenn Mc
"Thomas Kellerer" <YQDHXVLMUBXG@spammotel.comwrote in message news:68dkudF2sv349U1@mid.individual.net...
Quote:
Sorry, I meant Driver.connect()
Once you have loaded the driver class using a URLClassLoader, you can create a new instance and cast that to a Driver and then ask the driver to connect.
Something like this:
URLClassLoader l = new URLClassLoader(...);
Class drvClass = l.loadClass("org.postgresql.Driver");
java.sql.Driver drv = (java.sql.Driver)drvClass.newInstance();
Properties props = new Properties();
props.put("user", "postgres");
props.put("password", "password");
java.sql.Connection conn = drv.connect("jdbc:postgresql:localhost/mydb", props);
Regards
Thomas |