Revision: 4634
          http://sourceforge.net/p/jump-pilot/code/4634
Author:   edso
Date:     2015-12-18 13:53:37 +0000 (Fri, 18 Dec 2015)
Log Message:
-----------
workaround a bug in java DriverManager

"
java.sql.SQLException: invalid database address: 
jdbc:oracle:thin:@//localhost:12/edb
        at org.sqlite.JDBC.createConnection(JDBC.java:111)
        at org.sqlite.JDBC.connect(JDBC.java:88)
        at 
com.vividsolutions.jump.datastore.jdbc.DelegatingDriver.connect(DelegatingDriver.java:32)
        at java.sql.DriverManager.getConnection(DriverManager.java:619)
        at java.sql.DriverManager.getConnection(DriverManager.java:244)
 "

Modified Paths:
--------------
    
core/trunk/src/com/vividsolutions/jump/datastore/spatialdatabases/SpatialDatabasesDataStoreDriver.java

Modified: 
core/trunk/src/com/vividsolutions/jump/datastore/spatialdatabases/SpatialDatabasesDataStoreDriver.java
===================================================================
--- 
core/trunk/src/com/vividsolutions/jump/datastore/spatialdatabases/SpatialDatabasesDataStoreDriver.java
      2015-12-18 13:33:15 UTC (rev 4633)
+++ 
core/trunk/src/com/vividsolutions/jump/datastore/spatialdatabases/SpatialDatabasesDataStoreDriver.java
      2015-12-18 13:53:37 UTC (rev 4634)
@@ -1,5 +1,9 @@
 package com.vividsolutions.jump.datastore.spatialdatabases;
 
+import java.sql.Connection;
+import java.sql.Driver;
+import java.sql.DriverManager;
+
 import com.vividsolutions.jump.datastore.DataStoreConnection;
 import com.vividsolutions.jump.datastore.DataStoreDriver;
 import com.vividsolutions.jump.datastore.jdbc.DelegatingDriver;
@@ -11,10 +15,6 @@
 import com.vividsolutions.jump.parameter.ParameterListSchema;
 import com.vividsolutions.jump.workbench.JUMPWorkbench;
 
-import java.sql.Connection;
-import java.sql.Driver;
-import java.sql.DriverManager;
-
 /**
  * A driver for supplying {@link SpatialDatabaseDSConnection}s
  */
@@ -124,13 +124,38 @@
       this.registered = true;
     }
 
+    // some helpful debugging output
+    // DriverManager.setLogWriter(new PrintWriter(System.out));
+    // Enumeration<Driver> ds = DriverManager.getDrivers();
+    // while (ds.hasMoreElements()) {
+    // Driver d = ds.nextElement();
+    // System.out.println(d);
+    // System.out.println(url);
+    // System.out.println(d.acceptsURL(url));
+    // }
+    
     // mmichaud 2013-08-27 workaround for ticket #330
     String savePreferIPv4Stack = 
System.getProperty("java.net.preferIPv4Stack");
     String savePreferIPv6Addresses = 
System.getProperty("java.net.preferIPv6Addresses");
     System.setProperty("java.net.preferIPv4Stack", "true");
     System.setProperty("java.net.preferIPv6Addresses", "false");
 
-    Connection conn = DriverManager.getConnection(url, user, password);
+    // workaround a bug in DriverManager.getConnection() when used like this:
+    //   Connection conn = DriverManager.getConnection(url, user, password);
+    // getConnection() blindly connects to each driver and memorizes
+    // the first Exception that occurs. this includes "invalid database 
address"
+    // errors, which is stupid as connect would have only to ask the driver
+    // if it supports the given url scheme. funny enough getDriver() does, so
+    // we add a bit of code and get the connection ourself w/ the proper 
driver.
+    Driver d = DriverManager.getDriver(url);
+    java.util.Properties info = new java.util.Properties();
+    if (user != null) {
+      info.put("user", user);
+    }
+    if (password != null) {
+      info.put("password", password);
+    }
+    Connection conn = d.connect(url, info);
 
     if (savePreferIPv4Stack == null) {
       System.getProperties().remove("java.net.preferIPv4Stack");


------------------------------------------------------------------------------
_______________________________________________
Jump-pilot-devel mailing list
Jump-pilot-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/jump-pilot-devel

Reply via email to