【问题标题】:Connecting to SQL Server from java with TCP disabled在禁用 TCP 的情况下从 java 连接到 SQL Server
【发布时间】:2011-06-15 22:24:00
【问题描述】:

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

我用 Java 写下一条语句:

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

我有以下错误:

"java.net.SocketTimeoutException: 接收超时”。(然后它告诉我 可能有防火墙和 我应该运行 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 Managment Studio实际上是一个客户端,所以如果它可以连接任何客户端都应该可以。

请回答。如果您需要更多信息,请询问。

【问题讨论】:

标签: sql sql-server jdbc shared-memory


【解决方案1】:

不幸的是,Microsoft 的 JDBC 驱动程序不支持命名管道连接到 SQLServer。您可以尝试寻找替代的 JDBC 驱动程序来使用。

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

【讨论】:

  • 嗨。谢谢回答。我将尝试使用 jTDS,但我也将 piper 命名为禁用,我想使用共享内存。我确信它可以完成,因为我的客户端可以使用相同的配置从 .net 连接到同一个数据库。我会尝试 jTDS,但我认为 Microsoft 驱动程序没有所有功能感到非常遗憾。
  • 您成功连接共享内存了吗?我还禁用了 TCP/IP 和命名管道。
【解决方案2】:

我假设您使用的是 Visual Studio 2010 附带的 SQL Server Express 版本。对于其他版本应该有类似的解决方案,但我没有测试过。这是解决方案:

  1. 启用 TCP/IP 协议。 从开始菜单中找到“SQL Server 配置管理器”,展开“SQL Server 网络配置”并点击“SQLEXPRESS 协议”,双击“TCP /IP”并将“启用”属性更改为“是”。检查“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 连接。

【讨论】:

    【解决方案3】:

    我知道这是一个老问题。但是,我在搜索如何使用 Microsoft JDBC 驱动程序配置对 SQL Server 的共享内存访问时遇到了它。 确定的答案是:Microsoft JDBC 驱动程序只支持 TCP 连接,不支持共享内存,也不支持命名管道。既然驱动已经开源了,大家可以自己在GitHub上的源码中查看:相关代码是顶级类IOBuffer中的本地类TDSChannel(目前找到here)。此类中的方法open 仅访问 tcp 套接字(和 SSL 套接字),而不访问任何共享内存或命名管道。

    这意味着当您不能或不想使用 TCP/IP 连接时,只能使用 MS JDBC 驱动程序以外的其他驱动程序。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-02-08
      • 2021-06-10
      • 2016-08-28
      • 1970-01-01
      • 2017-10-05
      • 2011-01-24
      相关资源
      最近更新 更多