2015-09-10 50 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之间)时,一切正常。

这个级别的调查对我来说已经足够了,也许有人试图在菜单中发现错误。我可以接受(绿色)我自己的答案吗?