我试图通过使用jtds的jtds1.2.jar实现并在其上运行存储过程来连接到sqlServer 2008。 我写了一个成功完成测试的测试应用程序 。
我在自己的环境(不是应用程序服务器环境)中这样做有问题。 我使用java 1.4。 我设置了classpath以首先查看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);
在debuging中:myEnum有2个驱动程序:
在sun.jdbc.odbc.JdbcOdbcDriver
jtds驱动程序
我无所事事,DriverManger加载了第一个。
如何确保加载jtds驱动程序?
非常感谢
答案 0 :(得分:0)
老实说,当你明确指出它应该使用jTDS驱动程序时,我不明白为什么DriverManager会尝试使用JDBC-ODBC桥驱动程序。连接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。