2015-09-10 51 views
0

這樣的數據庫代碼是在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) 

編輯: 什麼我已經檢查:

  1. 新鮮開始Groovy的控制檯還沒有在classpath中sqljdbc4.jar。
第4行 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環境仍然正常工作。怎麼了?

+0

驅動程序jar是否在類路徑中? –

+0

是的,存在(加載不爲空)但「未激活」 –

+0

我不知道這意味着什麼:-( –

回答

0

作者日期的回答是:

當驅動程序JAR添加「動態」從菜單中(如書面以上)是可見的,但沒有工作的JDBC。

當驅動程序JAR被放入... console \ lib目錄(在Groovy的其他JAR'a之間)時,一切正常。

這個級別的調查對我來說已經足夠了,也許有人試圖在菜單中發現錯誤。我可以接受(綠色)我自己的答案嗎?