Строка тестового соединения Java JDBC JTDS

У меня есть приложение, использующее JTDS для подключения к SQL Server. Мне нужно изменить базу данных и сначала проверить строку подключения, прежде чем перенастраивать приложение. Я администратор базы данных SQL Server, а не разработчик 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

Я могу упустить что-то очевидное, но, пожалуйста, помогите мне решить эту проблему.


person DiamondBeezer    schedule 18.07.2017    source источник
comment
Попробовал, спасибо @Arvind, но получил точно такую ​​же ошибку «Нет подходящего драйвера».   -  person DiamondBeezer    schedule 18.07.2017


Ответы (2)


Похоже, вы столкнулись с двумя проблемами:

Проблема 1. Кажется, что jTDS 1.2 достаточно устарела, поэтому вам действительно нужно вызывать

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

перед попыткой установить соединение.

Проблема 2. Когда вы указываете путь к классам, вам нужно явно включить JAR-файл jTDS. То есть не получится...

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.
...
person Gord Thompson    schedule 18.07.2017
comment
Вот и все, @Горд Томпсон! «Старый» драйвер JTDS — это боль. Моя цель - заставить его подключаться через SQL Server AlwaysOn Availability Listener... Я также ошибочно предполагал, что -cp C:\JavaTest "увидит" файл .jar внутри него. Не должно быть спасибо в комментарии, но спасибо! - person DiamondBeezer; 18.07.2017

Давайте разберем шаги, запустим следующие команды из 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);

person Community    schedule 18.07.2017
comment
Не используйте переменную среды CLASSPATH. Используйте параметр -cp для команды java - person a_horse_with_no_name; 18.07.2017
comment
@Arvind - все та же ошибка - не найден подходящий драйвер для jdbc:jtds:sqlserver://UK-SB-SQL0... - person DiamondBeezer; 18.07.2017