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

wpcxdonn  于 2023-01-08  发布在  SQL Server
关注(0)|答案(2)|浏览(274)

这很奇怪。我在运行VirtualBox 4.2.6的Mac OS X 10.7.5 64位主机上。我有一个运行Microsoft SQL Server Express 2012的Windows 7 SP1访客(64位),它具有桥接网络。我将SQL Server配置为在端口1433上使用TCP/IP,而不是动态端口(设置为空,而不是0)。Windows 7访客的IPv4地址为192.168.99.132并且Windows防火墙已关闭。
我下载了适用于Windows和Mac的Microsoft SQL Server 2012 JDBC驱动程序沿着Squirrel SQL Client 3.4.0。当我在Windows 7访客操作系统上运行Squirrel时,我可以使用访客计算机名“winny”、“localhost”或“192.168.99.132“(JDBC URL如jdbc:sqlserver://winny\SQLEXPRESS:1433;然而,当我尝试从运行在Mac主机上的Squirrel连接到SQL Server时,我遇到了一个异常(请参阅下面的堆栈跟踪)。
奇怪的是,如果我 * 从Mac主机 * 使用jTDS SQL Server驱动程序(版本1.2.7,因为我使用的是JDK 6,所以不能使用jTDS 1.3.0 --该版本仅适用于JDK 7),我会立即使用JDBC URL jdbc:jtds:sqlserver://www.example.com进行连接192.168.99.132:1433/vha。
你知道为什么微软驱动程序失败了,而jTDS从远程主机成功了吗?微软的jTDS URL中唯一缺少的信息是示例名称(“SQLEXPRESS”)。是的,我试过带示例名称和不带示例名称的微软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
zf9nrax1

zf9nrax11#

理论上,您还需要在jTDS连接字符串中使用示例名称(例如,在jTDS连接字符串中添加“; instance=SQLEXPRESS”)--但是我不是jTDS的familair,我可能是错的,但是如果你没有设置它,而你正在连接,那么也许你正在连接到其他东西?
上面显示了带有IP地址的jTDS连接字符串和带有服务器名称“winny”的Microsoft连接字符串(jdbc:sqlserver://winny\SQLEXPRESS:1433;数据库名称=vha)--您是否尝试过IP地址?(jdbc:sqlserver:192.168.99.132\SQLEXPRESS:1433;数据库名称=vha)
我通常尝试的事情:
1.验证端口--是否可以telnet到主机上的localhost端口1433
1.验证网络--确保主机对ping有响应--您能从客户端按名称ping它吗?按IP地址?
1.验证端口1433是否打开--您可以通过telnet从客户机连接到端口1433上的主机吗?
因为您可以使用jTDS从Mac客户端进行连接,所以您应该已经能够完成所有这三项任务,但值得仔细检查。
您还可以尝试在服务器上硬编码端口1433(将其从空改为空)--也许存在另一个SQL示例?
下面是我通常会经历的一些步骤,也许这会有所帮助:
1.(服务器)打开SSMS,右键单击SQL Server,属性;请验证是否选中了“允许远程连接”。如果未选中,请检查并重新启动SQL Server。
1.(服务器)打开SQL Server配置管理器(开始-〉SQL Server -〉配置工具)
1.验证TCP/IP是否已启用
1.对于默认示例,验证是否设置了静态端口1433(注意:一个命名的示例将有一个反斜杠,例如类似MYSQLSERVER\MYINSTANCE的东西,而默认的示例只使用服务器名来标识。)
1.对于命名示例,选择另一个静态端口,例如1434+,并将其设置为静态端口。每个示例只能使用一个端口-不要在同一台计算机上重复使用它们。
1.重新启动SQL Server服务
1.(服务器)验证到目前为止所做的操作是否有效;在SQL Server计算机上:
1.打开CMD提示符“telnet localhost 1433”(根据需要将1433更改为其他端口号)
1.如果你得到一个空白的屏幕是“挂”,它的工作!
1.如果你得到一个错误,它没有工作。回到广场1。
1.尝试相同的操作,但使用计算机名而不是localhost
1.(服务器)配置Windows防火墙以向TCP端口1433(或在步骤2中选择的任何端口)添加例外
1.(服务器)如果使用命名示例,请为UDP端口1433添加另一个例外(对于SQL Browser服务,它使用UDP而不是TCP -另请注意,即使您在步骤2中为示例选择了其他TCP端口,SQL Browser服务也始终使用端口1433)
1.(客户端)从同一网络上的另一台计算机验证
1.打开CMD提示符,“ping“-如果您收到响应,计算机可以看到对方。即使您没有收到响应,请尝试下一步-例如Windows 7可能默认为不回复回显请求(ping)
1.打开CMD提示符“telnet 1433”(根据需要将1433更改为其他端口号)
1.如果你得到一个空白的屏幕是“挂”,它的工作!
1.如果你得到一个错误,它没有工作。回到广场1。
1.(客户端)现在尝试从其他应用程序(如Excel)连接到SQL Server
1.(客户端)有关其他错误,另请参见http://blogs.msdn.com/b/dataaccesstechnologies/archive/2010/01/29/testing-connection-to-sql-server-from-a-service-running-under-local-system-account.aspx

yrefmtwq

yrefmtwq2#

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";

相关问题