【问题标题】:Java JDBC JTDS test connection stringJava JDBC JTDS 测试连接字符串
【发布时间】:2017-07-18 09:50:37
【问题描述】:

我有一个使用 JTDS 连接到 SQL Server 的应用程序。我需要更改数据库并希望在重新配置应用程序之前先测试连接字符串。我是 SQL Server DBA,而不是 Java 开发人员! 这是我的测试代码:

// Import the SQL Server JDBC Driver classes 
import java.sql.*; 
class Example 
{  
   public static void main(String args[]) 
   {  
   try  
   { 
        // Build the connection string, and get a connection 
        System.out.println("1."); 
        System.out.println("2."); 
        String connectionUrl = "jdbc:jtds:sqlserver://UK-SB-Server:53569;DatabaseName=helpdesk;user=helpdesk;password=MyPwd;Tds=8.0;PrepareSql=3;XaEmulation=false";
        System.out.println("3."); 
        Connection con = DriverManager.getConnection(connectionUrl); 
        System.out.println("Connected."); 

        // Create and execute an SQL statement that returns some data.  
        String SQL = "SELECT * from dbo.AllowedValues";  
        Statement stmt = con.createStatement();  
        ResultSet rs = stmt.executeQuery(SQL); 

        // Iterate through the data in the result set and display it.  
        while (rs.next())  
        {  
           System.out.println(rs.getString(1) + " " + rs.getString(2));  
        } 
   }  
   catch(Exception e)  
   { 
        System.out.println("Error - " + e.getMessage()); 
        System.exit(0);  
   } 
} 
}

我编译它:

C:\Progra~1\Java\jdk1.6.0_45\bin\javac C:\JavaTest\example.java

我运行它:

C:\Progra~1\Java\jdk1.6.0_45\bin\java -classpath C:\JavaTest Example

jtds-1.2.jar 和 Example.class 都在 C:\JavaTest

我收到以下错误:

1.
2.
3.
Error - No suitable driver found for jdbc:jtds:sqlserver://UK-SB-Server:53569;DatabaseName=helpdesk;user=helpdesk;password=MyPwd;Tds=8.0;PrepareSql=3;XaEmulation=false

我读过关于我是否需要的相互矛盾的帖子

Class.forName("net.sourceforge.jtds.jdbc.Driver");

或者不。如果我在println("1.")println("2.") 之间划了一条线,它会更早地失败,因为

1.
Error - net.sourceforge.jtds.jdbc.Driver

我可能遗漏了一些明显的东西,但请帮我解决这个问题。

【问题讨论】:

  • 试过了,谢谢@Arvind,但得到了完全相同的没有合适的驱动程序错误。

标签: java jdbc jtds


【解决方案1】:

您似乎面临两个问题:

问题 1. 看来 jTDS 1.2 已经足够老了,您确实需要调用

Class.forName("net.sourceforge.jtds.jdbc.Driver");

在您尝试建立连接之前。

问题 2. 指定类路径时,需要显式包含 jTDS jar 文件。也就是说,这行不通……

C:\JavaTest>"\Program Files\Java\jdk1.6.0_45\bin\java.exe" -cp C:/JavaTest Example
1.
Error - net.sourceforge.jtds.jdbc.Driver

...但这对我有用:

C:\JavaTest>"\Program Files\Java\jdk1.6.0_45\bin\java.exe" -cp C:/JavaTest;C:/JavaTest/jtds-1.2.jar Example
1.
2.
3.
Connected.
...

【讨论】:

  • 就是这样@Gord Thompson! “旧” JTDS 驱动程序很痛苦。我的目标是让它通过 SQL Server AlwaysOn 可用性侦听器连接...我还错误地假设 -cp C:\JavaTest 会“看到”其中的 .jar 文件。不应该在评论中说谢谢,但谢谢!
【解决方案2】:

让我们分解步骤,从 cmd 运行以下命令:

cd C:\JavaTest
set path=C:\Progra~1\Java\jdk1.6.0_45\bin
javac example.java
java -cp .;jtds-1.2.jar -Djdbc.drivers=net.sourceforge.jtds.jdbc.Driver Example

最后一行会手动加载驱动,所以不用改代码。

问题是您需要在连接数据库之前注册驱动程序。

我读过关于我是否需要的相互矛盾的帖子

Class.forName("net.sourceforge.jtds.jdbc.Driver");

可以,但必须放在行前

Connection con = DriverManager.getConnection(connectionUrl);

【讨论】:

  • 不要使用CLASSPATH 环境变量。对java 命令使用-cp 参数
  • @Arvind - 仍然相同“错误 - 找不到适合 jdbc:jtds:sqlserver://UK-SB-SQL0... 的驱动程序”