Я изучаю Java и должен просто запускать что-то простое для извлечения некоторых данных из MSSQL через JDBC. Пример в моей книге не работает (но ему несколько лет), и этот пример ниже из MS тоже не работает для меня:
http://msdn.microsoft.com/en-us/library/ms378956(v=sql.90).aspx
Здесь мой код:
package javasql;
import java.sql.*;
import java.util.*;
public class Program {
private static String url = "jdbc:sqlserver://localhost\\SQLExpress;database=Northwind;integratedSecurity=true;";
//private static String userName = "sa";
//private static String password = "myPassword";
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
RunDemo();
}
public static void RunDemo() {
try {
Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
Connection connection = DriverManager.getConnection(url);
Statement statement = connection.createStatement();
ResultSet results = statement.executeQuery("SELECT ProductName, Price FROM Products ORDER BY ProductName");
while(results.next()) {
System.out.println("Product Name: " + results.getNString("ProductName") + " Price: $" + results.getFloat("UnitPrice"));
}
} catch (ClassNotFoundException | SQLException ex) {
System.out.println(ex.getMessage());
}
}
}
Когда я запускаю код, я не получаю никаких исключений. Я просто получаю это в окне вывода:
run:
com.microsoft.sqlserver.jdbc.SQLServerDriver
BUILD SUCCESSFUL (total time: 0 seconds)
Я использую NetBeans 7.2. Пожалуйста, дайте мне рабочий пример.
EDIT:
Кстати, для строки подключения, где вы видите \\SQLExpress
, я попытался удалить это и использовать instanceName=SQLExpress
вместо этого.. но это тоже не имело никакого эффекта.
ИЗМЕНИТЬ 2:
ОК, я загрузил последний JDBC-драйвер для MSSQL из MS и указал на 2 файла JAR. Теперь я получаю этот вывод:
run:
The connection to the host localhost, named instance SQLExpress failed.
Error: "java.net.SocketTimeoutException: Receive timed out".
Verify the server and instance names and check that no firewall is blocking UDP traffic to port 1434.
For SQL Server 2005 or later, verify that the SQL Server Browser Service is running on the host.
BUILD SUCCESSFUL (total time: 15 seconds)
Прогресс.. По крайней мере, мы можем видеть, что он пытается подключиться сейчас, может кто-нибудь просветить меня по поводу вышеупомянутой ошибки?
ИЗМЕНИТЬ 3:
исправлено еще 2 проблемы.. один из них включает браузер SQL Server, а второй - включение TCP/IP для SQL Server. Спасибо @Vikdor Теперь я получаю эту ошибку:
run:
The TCP/IP connection to the host localhost, port 1433 has failed. Error: "Connection refused: connect. Verify the connection properties. Make sure that an instance of SQL Server is running on the host and accepting TCP/IP connections at the port. Make sure that TCP connections to the port are not blocked by a firewall.".
BUILD SUCCESSFUL (total time: 15 seconds)
Я проверил брандмауэр окон и добавил входящее правило, чтобы разрешить этот порт, но я все еще получаю вышеуказанную ошибку. Любые идеи?
РЕДАКТИРОВАТЬ 4:
Пробовал решение по этой ссылке: http://www.coderanch.com/t/306316/JDBC/databases/SQLServerException-TCP-IP-connection-host
Больше не возникает ошибка в EDIT 3. Теперь получаем другую...
run:
Sep 21, 2012 11:33:16 AM com.microsoft.sqlserver.jdbc.AuthenticationJNI <clinit>
WARNING: Failed to load the sqljdbc_auth.dll cause : no sqljdbc_auth in java.library.path
This driver is not configured for integrated authentication. ClientConnectionId:577f359e-4774-45f3-96fb-588785911817
BUILD SUCCESSFUL (total time: 14 seconds)
Очень устал от этого сейчас.. почему Java, почему??? Серьезно... Я рад, что работаю в основном с .NET. Ну, когда я найду решение, я отправлю его здесь, чтобы убедиться, что он может помочь другим, прежде чем они сойдут с ума, поскольку я собираюсь...
РЕДАКТИРОВАТЬ 5:
Это помогло: java подключение к MicrosoftSQLServer 2005
Я помещаю путь каталога в переменную среды PATH. Не работает, поэтому я также поместил sqljdbc_auth.dll
в папку JDK C:\Program Files\Java\jdk1.7.0_04\bin
. Решаемые.