2011-02-04 162 views
0

我试图使用jdbc的jtds1.2.jar实现连接到sqlserver 2008并在其上运行存储过程。 我写了一个测试应用程序,成功地做到了这一点加载了错误的驱动程序

我在自己的env(不是应用程序服务器环境)中这样做有问题。 Iam使用java 1.4。 我设置我的类路径以首先查看jtds。 当调用DriverManager.getConnection ...方法时,源代码不是jtds的源代码。 这里是我的代码(这是从示例相同的代码):

Class.forName("net.sourceforge.jtds.jdbc.Driver"); 
String url = "jdbc:jtds:sqlserver://" + serverIP + ":" + port + "/" + serviceName; 
java.util.Enumeration myEnum = DriverManager.getDrivers(); 
Connection connection = DriverManager.getConnection(url,userName,password); 

在调试运行:myEnum有2名司机:

  1. 在sun.jdbc.odbc.JdbcOdbcDriver

  2. jtds的驱动程序

我无畏DriverManger加载第一个。

我如何确保加载jtds驱动程序?

非常感谢

回答

0

老实说,我不能明白为什么会DriverManager的尝试使用JDBC-ODBC桥驱动程序时,你已经明确地确定它应该使用JTDS驱动程序。连接URL的第二部分是jtds,这是告诉DriverManager使用jTDS驱动程序。是什么让你确信DriverManager加载了JDBC-ODBC桥接驱动程序?

在我的系统上,我还看到枚举DriverManager.getDrivers()中的相同两个条目。但是,仅仅因为JDBC-ODBC桥驱动程序首先出现在这个列表中,并且因为您可以想象通过它连接到SQL Server,并不意味着DriverManager会选择它。你要求使用jTDS驱动程序,它会使用或不使用。

如果您在拨打getConnection的电话时故意输入错误的用户名和密码,会发生什么情况?当我这样做,我得到一个堆栈跟踪这清楚地表明它是一个使用JTDS:

 
java.sql.SQLException: Login failed for user 'x'. 
     at net.sourceforge.jtds.jdbc.SQLDiagnostic.addDiagnostic(SQLDiagnostic.java:368) 
     at net.sourceforge.jtds.jdbc.TdsCore.tdsErrorToken(TdsCore.java:2820) 
     at net.sourceforge.jtds.jdbc.TdsCore.nextToken(TdsCore.java:2258) 
     at net.sourceforge.jtds.jdbc.TdsCore.login(TdsCore.java:603) 
     at net.sourceforge.jtds.jdbc.ConnectionJDBC2.<init>(ConnectionJDBC2.java:345) 
     at net.sourceforge.jtds.jdbc.ConnectionJDBC3.<init>(ConnectionJDBC3.java:50) 
     at net.sourceforge.jtds.jdbc.Driver.connect(Driver.java:184) 
     at java.sql.DriverManager.getConnection(DriverManager.java:582) 
     at java.sql.DriverManager.getConnection(DriverManager.java:185) 
     ... 

编辑:在你的评论中写道:

调试运行getConnection方法的SRC代码不一致时,在jtds1.2源代码

我不完全知道你的意思,但在这里我猜,你通过代码使用调试器步进,当你尝试步入getConnection方法,调试器不会跳入jTDS源代码。通常,调试器不会自动获取JAR的源代码 - 您必须将源代码“附加”到调试器。准确地说,你如何做到这一点取决于你正在使用的调试器。

但是,我不确定为什么你想要步入getConnection方法。我猜你连接数据库时遇到了一些困难。你确定所有的数据库连接细节都是正确的吗?您是否可以使用其他程序(例如SQL Server Management Studio)连接到数据库?

最后,(这是一个完整的猜测,但我之前也遇到了同样的问题),您是否试图连接到SQL Server Express版本?如果是这样,您需要在数据库上启用TCP/IP连接。 JDBC使用TCP/IP连接来连接到SQL Server,而在Express版本上,这些连接默认是禁用的。有关如何执行此操作的说明,请参阅http://softwaresalariman.blogspot.com/2007/04/jdbc-to-sql-server-express.html

+0

thanks.you是对的,我不确定是否使用了JDBC-ODBC桥。但是当调试getconnection方法时,src代码与jtds1.2源代码不匹配。所以我得出结论,错误的驱动程序被加载。我首先在我的classpath中找到jtds1.2.jar。你有其他解决方案吗? – Waseem 2011-02-05 19:40:29

相关问题