当前位置: 首页 > 知识库问答 >
问题:

无法通过Microsoft SQL Server 2012 JDBC驱动程序连接到SQL Server

耿招
2023-03-14

这很奇怪。我使用的是运行VirtualBox 4.2.6的Mac OS X 10.7.5 64位主机。我有一个Windows 7 SP1来宾(64位),带有运行Microsoft SQL Server Express 2012的桥接网络。我将 SQL Server 配置为在端口 1433 上使用 TCP/IP,而不是动态端口(设置为空,而不是 0)。Windows 7 来宾的 IPv4 地址为 192.168.99.132,并且 Windows 防火墙已关闭。

我下载了Microsoft SQL Server 2012 JDBC驱动程序以及适用于Windows和Mac的Squirrel SQL client 3.4.0。当我在Windows 7客户操作系统上运行Squirrel时,我可以通过Microsoft JDBC驱动程序使用客户机名称“winny”、“localhost”或“192.168.99.132”(JDBC URL,如JDBC:sqlserver://winny\SQLEXPRESS:1433;databaseName=vha)。然而,当我试图从Mac主机上运行的Squirrel连接到SQL Server时,我遇到了一个异常(请参见下面的堆栈跟踪)。

奇怪的是。如果在Mac主机上,我使用jTDS SQL Server驱动程序(版本1.2.7,因为我使用的是JDK6,所以不能使用jTDS 1 . 3 . 0——那个版本只是JDK7 ),我会立即使用JDBC URL JDBC:jTDS:SQL Server://192 . 168 . 99 . 132:1433/vha进行连接。

你知道为什么微软驱动程序失败了,但jTDS在远程主机上成功了吗?Microsoft one中的jTDS URL中唯一缺少的信息是实例名(“SQLEXPRESS”)。是的,我试过Microsoft URL,有实例名和没有实例名。

Mac主机上Java版本是:

java version "1.6.0_37"
Java(TM) SE Runtime Environment (build 1.6.0_37-b06-434-11M3909)
Java HotSpot(TM) 64-Bit Server VM (build 20.12-b01-434, mixed mode)

Windows 7 客户机上的 Java 版本是:

java version "1.6.0_35"
Java(TM) SE Runtime Environment (build 1.6.0_35-b10)
Java HotSpot(TM) 64-Bit Server VM (build 20.10-b01, mixed mode)

从 Mac 主机连接到 Windows 7 客户机时的堆栈跟踪:

java.util.concurrent.ExecutionException: java.lang.RuntimeException: com.microsoft.sqlserver.jdbc.SQLServerException: The TCP/IP connection to the host 192.168.99.132, port 1433 has failed. Error: "null. 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.".
    at java.util.concurrent.FutureTask$Sync.innerGet(FutureTask.java:232)
    at java.util.concurrent.FutureTask.get(FutureTask.java:91)
    at net.sourceforge.squirrel_sql.client.mainframe.action.OpenConnectionCommand.awaitConnection(OpenConnectionCommand.java:132)
    at net.sourceforge.squirrel_sql.client.mainframe.action.OpenConnectionCommand.access$100(OpenConnectionCommand.java:45)
    at net.sourceforge.squirrel_sql.client.mainframe.action.OpenConnectionCommand$2.run(OpenConnectionCommand.java:115)
    at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:439)
    at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
    at java.util.concurrent.FutureTask.run(FutureTask.java:138)
    at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
    at java.lang.Thread.run(Thread.java:680)
Caused by: java.lang.RuntimeException: com.microsoft.sqlserver.jdbc.SQLServerException: The TCP/IP connection to the host 192.168.99.132, port 1433 has failed. Error: "null. 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.".
    at net.sourceforge.squirrel_sql.client.mainframe.action.OpenConnectionCommand.executeConnect(OpenConnectionCommand.java:171)
    at net.sourceforge.squirrel_sql.client.mainframe.action.OpenConnectionCommand.access$000(OpenConnectionCommand.java:45)
    at net.sourceforge.squirrel_sql.client.mainframe.action.OpenConnectionCommand$1.run(OpenConnectionCommand.java:104)
    ... 6 more
Caused by: com.microsoft.sqlserver.jdbc.SQLServerException: The TCP/IP connection to the host 192.168.99.132, port 1433 has failed. Error: "null. 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.".
    at com.microsoft.sqlserver.jdbc.SQLServerException.makeFromDriverError(SQLServerException.java:190)
    at com.microsoft.sqlserver.jdbc.SQLServerException.ConvertConnectExceptionToSQLServerException(SQLServerException.java:241)
    at com.microsoft.sqlserver.jdbc.SocketFinder.findSocket(IOBuffer.java:2243)
    at com.microsoft.sqlserver.jdbc.TDSChannel.open(IOBuffer.java:491)
    at com.microsoft.sqlserver.jdbc.SQLServerConnection.connectHelper(SQLServerConnection.java:1309)
    at com.microsoft.sqlserver.jdbc.SQLServerConnection.login(SQLServerConnection.java:991)
    at com.microsoft.sqlserver.jdbc.SQLServerConnection.connect(SQLServerConnection.java:827)
    at com.microsoft.sqlserver.jdbc.SQLServerDriver.connect(SQLServerDriver.java:1012)
    at net.sourceforge.squirrel_sql.fw.sql.SQLDriverManager.getConnection(SQLDriverManager.java:133)
    at net.sourceforge.squirrel_sql.client.mainframe.action.OpenConnectionCommand.executeConnect(OpenConnectionCommand.java:167)
    ... 8 more

共有2个答案

尉迟京
2023-03-14
    Step 1: Download jtds.jar from http://sourceforge.net/projects/jtds/files/

    Step 2: Add the jar into eclipse or any IDE.

    Step 3: 
    String driver="net.sourceforge.jtds.jdbc.Driver";
    Class.forName(driver).newInstance();

    String connString="jdbc:jtds:sqlserver://127.0.0.1:1433/database_name;encrypt=false;user=sa;password=yourpassword;integratedSecurity=true;instance=SQLEXPRESS;";
    String username="sa";
    String password="yourpassword";
OR
String connString="jdbc:jtds:sqlserver://192.168.1.198:1433/database_name;encrypt=false;user=sa;password=yourpassword;";
        String username="sa";
        String password="yourpassword";
齐夕
2023-03-14

理论上,您还需要jTDS连接字符串中的实例名称(例如,附加“instance=SQLEXPRESS”)——但我不熟悉jTDS,我可能错了,但如果您没有设置,并且正在连接,那么您可能正在连接其他东西?

您在上面显示了带有IP地址的jTDS连接字符串和带有服务器名“winny”的Microsoft连接字符串(JDBC:SQL server://winny \ SQLEXPRESS:1433;你试过IP地址了吗?(JDBC:SQL server://192 . 168 . 99 . 132 \ SQLEXPRESS:1433;数据库名=vha)

我通常尝试的事情:

    < li >验证端口-您能远程登录到主机上的本地主机端口1433吗 < li >验证网络-确保主机响应ping -您能从客户端按名称ping它吗?通过IP地址? < li >验证端口1433是否打开-您能否从客户端telnet到端口1433上的主机?

因为您可以使用jTDS从Mac客户端连接,所以您应该已经能够执行所有这三个操作,但值得仔细检查。

您还可以尝试在服务器上对端口1433进行硬编码(将其从空白更改为空)——可能存在另一个SQL实例?另见http://support.microsoft.com/kb/287932

以下是我通常会经历的一些步骤,也许这会有所帮助:

  1. (服务器)打开 SSMS,右键单击 SQL Server 的“属性”;验证是否已选中“允许远程连接”。如果没有,请检查并重新启动 SQL Server。
  2. (服务器) 打开 SQL Server Configuration Manager (Start -
  1. 打开 CMD 提示符“telnet localhost 1433”(根据需要将 1433 更改为其他端口号)
    1. 如果您得到一个“挂起”的空白屏幕,它起作用了!
    2. 如果您收到错误,则它不起作用。回到原点 1。
      < li >打开CMD提示符“ping”-如果您得到响应,机器可以看到彼此。即使您没有得到响应,请尝试下一步—例如,Windows 7可能默认不回复回应请求(ping) < li >打开CMD提示符" telnet 1433 "(将1433更改为其他合适的端口号) < ol > < li >如果您得到一个“挂起”的空白屏幕,它工作了! < li >如果出现错误,则说明它没有工作。回到起点。

 类似资料:
  • 我正在尝试使用本教程连接Oracle数据库。当我使用命令行:java-cp c:\jdbc-test\ojdbc6.jar;c:\jdbc-test OracleJDBC我已经将ojdbc6.jar与OracleJDBC.java放在同一个文件夹中。现在我需要在Eclipse上运行它,但它给我一个错误: 是因为OJDBC6.jar位置吗?

  • 我使用JBoss作为7.1.1.final作为我的应用程序服务器。 我已经在JBoss社区用户论坛上发布了我的问题:question-here jboss-as-cmt war工作得很好,即我能够将客户添加到发票中。我可以psql进入数据库引擎,我可以看到所有的记录。我唯一的问题是我不能使用h2console webapp进入我创建的jboss-as-cmt postgres数据库。 我使用:“o

  • 问题内容: 我已经在服务器上安装了Kibana 5.4和Elastic search 5.4,我可以通过使用本地计算机上的curl来访问Kibana和Elastic search 我得到以下回应 var hashRoute =’/ app / kibana’; var defaultRoute =’/ app / kibana’; var hash = window.location.hash;

  • 我已经在服务器上安装了Kibana 5.4和Elastic search 5.4,我可以使用 我得到以下回应 var hashRoute='/app/kibana'; var defaultRoute='/app/kibana'; var hash=window.location.hash; if(hash.length){window.location=hashRoute hash;}其他{wi

  • 我无法成功地将MS Access连接到R。在堆栈溢出时读取其他线程时,我遵循了使用32位访问、将Rstudio更改为32位以及使用microsoft Access odbc驱动程序的建议。我不知道该怎么办... 我使用了以下说明: null 请帮忙,不胜感激。我无法单独从其他R中收集足够的信息来访问连接线程。

  • 使用JDBC Driver Manager连接到MySQL DB时,连接成功并按预期检索结果集。但是当尝试使用org.springframework.jdbc.datasource.DriverManagerDataSource或org.springframework.jdbc.datasource.SimpleDriverDataSource通过Spring配置进行连接时 JDBC驱动程序com