我正在学习 Java,需要运行一些简单的东西来通过 JDBC 从 MSSQL 中检索一些数据。我书中的例子不起作用(但它已经有好几年了),下面这个来自 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。请有人给我一个工作示例。
编辑:
顺便说一句,对于您看到的连接字符串,\\SQLExpress
我确实尝试删除它并instanceName=SQLExpress
改为使用..但这也没有任何效果。
编辑2:
好的,我从 MS 下载了最新的 MSSQL JDBC 驱动程序,并在其中引用了 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 Browser,第二个是为 SQL Server 启用 TCP/IP。谢谢@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)
我检查了 Windows 防火墙并添加了一个入站规则以允许该端口,但我仍然收到上述错误。有任何想法吗?
编辑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
中。解决了。