El 18/05/12 00:21, Alessio Stalla escribió:
On Thu, May 17, 2012 at 11:04 PM, Francisco Vides Fernández fvides@igaleno.com wrote:
Hello everyone
I intend to use ABCL in one of my projects. I've started to connectiing to a postgresq database via jdbc. I've tried something like:
-------8<------- (add-to-classpath (merge-pathnames #p".m2/repository/postgresql/postgresql/8.4-702.jdbc4/postgresql-8.4-702.jdbc4.jar" (user-homedir-pathname)))
(jstatic "forName" "java.lang.Class" "org.postgresql.Driver") -------8<-------
But it always returns -------8<------- Java exception 'java.lang.ClassNotFoundException: org.postgresql.Driver'. [Condition of type JAVA-EXCEPTION] -------8<------- The jar file exists, and has the proper class inside. I've read the manual, and googled a bit, but still get the same error. I'm using Ubuntu Linux, with OpenJDK 1.6.0_24, and the latest and greatest ABCL downloaded as a binary from ABCL website. Can someone point me what I'm doing wrong?
TL;DR: use (java:jclass "org.postgresql.Driver").
[snip]
Yes, that did the trick, but now I've the following code: --------------8x-------------- (java:jclass "org.postgresql.Driver") #<java.lang.Class class org.postgresql.Driver {67AFF9E8}> ;; the driver loads, yay!
(java:jstatic "getConnection" "java.sql.DriverManager" "jdbc:postgresql://localhost:5432/test") --------------8x-------------- Throws:
--------------8x-------------- Java exception 'java.sql.SQLException: No suitable driver found for jdbc:postgresql://localhost:5432/test'. [Condition of type JAVA-EXCEPTION] --------------8x--------------
But the equivalent java code works: --------------8x-------------- public class JdbcConn { public static void main(String[] args) { try { Class.forName("org.postgresql.Driver"); java.sql.Connection c = java.sql.DriverManager.getConnection("jdbc:postgresql://localhost:5432/test"); } catch(Exception e) { e.printStackTrace(System.err); } } } --------------8x--------------
I fail to see how the ClassLoader machinery affects this. The org.postgresql.Driver class self-registers with driver manager, in a static block of code:
--------------8x-------------- java.sql.DriverManager.registerDriver(new Driver()); --------------8x--------------
But apparently that isn't happening. I've even tried to do that by hand but nothing.
Some clue on what's happening?