使用禁用TCP的Java连接到SQL Server

10

我正在尝试从Java连接到本地数据库(SQL Server 2008)。根据客户要求,我已经禁用了TCP连接并且无法连接。我还必须禁用SQL Server Browser服务。

我在Java中编写了以下语句:

conexion = DriverManager.getConnection("jdbc:sqlserver://localhost\\SQLEXPRESS;user=user;password=password");

我遇到了以下错误:

"java.net.SocketTimeoutException: Receive timed out" (然后它告诉我可能存在防火墙,建议运行SQL Server浏览器)。

如果我尝试从Microsoft SQL Server Managment Studio连接,我可以使用相同的参数连接:

Server type: Database Engine
Server name: localhost\SQLEXPRESS
Authentication: SQL Server Authentication
User: user
Password: password

我不确定我在Java方面是否做错了什么,但SQL Server Management Studio实际上是一个客户端,因此如果它可以连接任何客户端都应该可以。请回答。如果您需要更多信息,请询问。

你解决了这个问题吗?我也有同样的需求。 - vbjain
3个回答

6

很遗憾,微软的JDBC驱动程序不支持使用命名管道连接到SQLServer。您可以尝试寻找替代的JDBC驱动程序来使用。

看看jTDS。它是免费的、开源的,并且它使用命名管道连接到SQLServer。


你好。 感谢你的回答。 我会尝试使用jTDS,但是我也禁用了named piper,我想使用Shared Memory。我相信它是可以实现的,因为我的客户端可以使用相同的配置从.net连接到同一个数据库。我会尝试jTDS,但我认为微软驱动程序没有所有功能是非常遗憾的。 - user589155
这是jtds的示例:https://dev59.com/jWgu5IYBdhLWcg3wZmW8#24412037 - Vadzim
你成功连接到共享内存了吗?我也禁用了TCP/IP和命名管道。 - vbjain

1

我假设您正在使用随 Visual Studio 2010 一起提供的 SQL Server Express 版本。对于其他版本,应该有类似的解决方案,但我没有测试过。以下是解决方案:

  1. 启用TCP/IP协议。从开始菜单中找到“SQL Server配置管理器”,展开“SQL Server网络配置”并点击“SQLEXPRESS的协议”,双击“TCP/IP”并将“Enabled”属性更改为“Yes”。检查“IP地址”选项卡并启用您要使用的IP地址(通常为“127.0.0.1”)。

  2. 在SQL Server中启用用户sa。按Win+R键,输入“sqlcmd -S .\SQLEXPRESS”并运行以下命令:

    ALTER LOGIN sa ENABLE;
    GO
    ALTER LOGIN sa WITH PASSWORD='StrongPassword1!'
    GO
    
  3. 更改登录模式以启用显式登录。再次按Win+R键,输入“regedit”,找到以下密钥

    HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\MSSQL10.SQLEXPRESS\MSSQLServer
    

    然后将“LoginMode”值更改为2。

  4. 测试配置。在Visual Studio 2010中创建一个测试连接,使用用户名“sa”和密码“StrongPassword1!”。如果您可以连接,您也应该能够通过JDBC连接。


1

我知道这是一个老问题。然而,我正在搜索如何使用Microsoft JDBC驱动程序配置共享内存访问SQL Server,并找到了它。 明确的答案是:Microsoft JDBC驱动程序仅支持TCP连接,不支持共享内存或命名管道。现在驱动程序是开源的,您可以在GitHub上的源代码中检查自己:相关代码是顶级类IOBuffer中的本地类TDSChannel(当前在此处找到)。该类中的open方法仅访问tcp套接字(和SSL套接字),而不访问任何共享内存或命名管道。

这意味着当您无法或不想使用TCP/IP连接时,使用MS JDBC驱动程序以外的其他驱动程序是唯一的选择。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接