這樣的數據庫代碼是在Java環境OK(不綁定值「C」),但在Groovy控制檯無法正常使用JDBC,與例外什麼是Groovy Console/jdbc驅動程序標準的類路徑?
java.sql.SQLException: No suitable driver found for jdbc:sqlserver://localhost;databaseName=
驅動程序類的腳本(稱爲無空裝等等),但可能未在Drivermanager中註冊?
代碼(我試圖與不Class.forname()
)
import groovy.sql.Sql
import groovy.sql.DataSet
c = Class.forName('com.microsoft.sqlserver.jdbc.SQLServerDriver')
def db = [url:'jdbc:sqlserver://localhost;databaseName=... ,driver:'com.microsoft.sqlserver.jdbc.SQLServerDriver']
def sql = Sql.newInstance(db)
編輯: 什麼我已經檢查:
- 新鮮開始Groovy的控制檯還沒有在classpath中sqljdbc4.jar。
Class.forName()
自然異常java.lang.ClassNotFoundException
,或者如果4號線和評論參數隨驅動程序名稱DB上線除外7 Sql.newInstance(db)
沒有找到它的邏輯,驅動器類等..
1A。如果有3個參數(不帶司機)數據庫的參數,我想在第7行Sql.newInstance(db)
其法律(而在其他情況下工作)異常變化SQLException: No suitable driver
這是合乎邏輯也DriverManager的不知道如何解決的關鍵jdbc:sqlserver
。驅動程序未註冊,DriverManager不知道類實現了什麼。
2. 當我將jar添加到控制檯classpath(腳本/將jar添加到classpath中)時,情況有所改變。沒有更多ClassNotFoundException
和變量c
具有非空值(驅動程序類),但SQLException: No suitable driver
繼續。
我對JDBC哲學的理解:(現代)JAR驅動程序使用META-INF/services/java.sql.Driver
的技術以DriverManager
而聞名。 因此,在正確的情況下,第四個參數(驅動器類名稱)是不需要的,因爲是自動發現的。 如果我錯了,請糾正我的理解。
從這個意義上說,我使用過單詞'active'(「non active」表示類存在並加載,但可以用作jdbc驅動程序)。
我最大的代碼是:
import groovy.sql.Sql
import groovy.sql.DataSet
import java.sql.DriverManager;
import java.util.ServiceLoader;
c = Class.forName('com.microsoft.sqlserver.jdbc.SQLServerDriver')
DriverManager.getDrivers()
ServiceLoader.load(java.sql.Driver.class)
def db = [url:'jdbc:sqlserver://localhost;...,driver:'com.microsoft.sqlserver.jdbc.SQLServerDriver']
def sql = Sql.newInstance(db)
但仍no suitable driver
異常
EDIT2: 我列舉這樣的代碼()的newInstance()之前的事情:
StringBuilder sb = new StringBuilder();
String grVersion = "brak";
Enumeration<Driver> dri = DriverManager.getDrivers();
for (Enumeration<Driver> e = dri; e.hasMoreElements();) {
Driver e1 = e.nextElement();
sb.append(e1.getClass().getName()).append(' ');
sb.append(e1.getMajorVersion()).append('.').append(e1.getMinorVersion());
}
// get LOADED drivers niesetty
ServiceLoader<java.sql.Driver> codecSetLoader = ServiceLoader.load(java.sql.Driver.class);
for (Driver e1 : codecSetLoader) {
sb.append(e1.getClass().getName()).append('!');
sb.append(e1.getMajorVersion()).append('.').append(e1.getMinorVersion());
sb.append("# ");
}
,並得到
com.mysql.jdbc.Driver 5.1com.mysql.fabric.jdbc.FabricMySQLDriver 5.1com.mysql.jdbc.Driver!5.1# com.mysql.fabric.jdbc.FabricMySQLDriver!5.1# com.microsoft.sqlserver.jdbc.SQLServerDriver!4.0#
Exception thrown
java.sql.SQLException: No suitable driver found for jdbc:sqlserver://localhost;databaseName=....
at ConsoleScript11.run(ConsoleScript11:32)
我的(基本)代碼執行是Tomcat環境仍然正常工作。怎麼了?
驅動程序jar是否在類路徑中? –
是的,存在(加載不爲空)但「未激活」 –
我不知道這意味着什麼:-( –