JDBC:简单的MSSql连接示例不起作用

我正在学习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()); } } } 

当我运行代码时,我没有抛出任何exception..我只是在输出窗口中得到这个:

 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:

修复了另外两个问题..一个是启用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  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 。 解决了。

好的,所以这就解决了我的问题:

  1. 从这里下载最新的MSSQL JDBC驱动程序: http : //msdn.microsoft.com/en-us/sqlserver/aa937724.aspx

  2. 在我的项目中引用了2个JAR文件: sqljdbc.jarsqljdbc4.jar (我还不确定上述两个都是必需的还是只有一个..)

  3. 确保SQL Server Browser Windows服务正在运行

  4. 打开SQL Server配置管理器,然后转到SQL Server网络配置的SQLEXPRESS协议 。 右键单击TCP / IP,然后选择“属性”。 设置已启用 =是。

  5. 当你在那里时,单击IP地址选项卡,找到IP全部部分。 将TCP端口设置为1433。

  6. sqljdbc_auth.dll添加到PATH环境变量中 。 就我而言: D:\ Java \ sqljdbc_4.0 \ enu \ auth \ x64

  7. sqljdbc_auth.dll复制到JDK目录 。 就我而言: C:\ Program Files \ Java \ jdk1.7.0_04 \ bin

我希望这可以帮助别人。

您可能需要检查我在此处列出的步骤: 错误:与主机的TCP / IP连接失败。 java.net.ConnectException:连接被拒绝:连接并查看是否正确配置了SQLExpress实例,然后修改JDBC URL以单独指定实例名称。 这个示例用于基于密码的身份validation,但适用于您的integratedSecurity=true; 属性。

谢谢最后它的工作。 如果它显示以下消息为错误,

  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 

请启用Sql Server Browser,

开始 > 控制面板 > 系统和安全 > 管理工具 > 服务

选择SQL Server Browser右键单击并选择属性

将开始类型设置为自动。 单击应用 > 单击开始 >单击确定

确保你的IPALL TCP地址是 – 1433

原因:

  1. 协议(TCP / IP)未启用
  2. 端口不正确
  3. 缺少sqljdbc_auth.dll

命名和多个SQL Server实例

如果需要从uni *连接到命名实例,请在构建JDBC连接URL时特别注意

如果同时使用portNumber和instanceName,则portNumber将优先,并且将忽略instanceName。

这也意味着如果要使用实例名称,则无法更改端口号。

在任何这些行中,将忽略参数myinstancename

  • JDBC:SQLSERVER:// DB-devmyinstancename;的databaseName = mydbname; PORTNUMBER = 1433
  • JDBC:SQLSERVER://分贝-dev的;的databaseName = dbname;开发实例名= myinstancename; PORTNUMBER = 1433
  • JDBC:SQLSERVER://分贝-dev的\ myinstancename:1433;的databaseName = mydbname
  • JDBC:SQLSERVER://分贝-dev的:1433;的databaseName = dbname;开发实例名= myinstancename

因此,如果您想使用实例名称,则必须删除端口号(尝试使用jdbc sqlserver drivers ver.3,4,4.1)

这可能很愚蠢,但请检查您的Products表是否为空。 我看到的唯一原因是没有任何exception,也没有在控制台中打印任何内容。

请启用Sql Server Browser,开始>控制面板>系统和安全>管理工具>服务选择SQL Server浏览器右键单击并选择属性。

将开始类型设置为自动。 单击应用>单击开始>单击确定

确保你的IPALL TCP地址是 – 1433!

在我的情况下:我没有在URL字符串中添加端口号

 String url = "jdbc:sqlserver://ABC\\SQLEXPRESS;databaseName=xyz;portNumber=1433" 

它解决了我的问题