我得到的完整错误:
到主机localhost端口1433的TCP/IP连接失败。错误:"连接超时。请验证连接属性。确保SQL Server实例在主机上运行并接受端口上的TCP/IP连接。确保到端口的TCP连接没有被防火墙阻止。".
我已经使用端口1433检查了TCP/IP是否已启用,并且TCP动态端口是否为空。我已禁用windows防火墙。
这是我的代码:
import java.sql.*;
public class DBConnect {
public static void main(String[] args) {
// TODO Auto-generated method stub
String dbURL = "jdbc:sqlserver://localhost:1433;DatabaseName=TestDB1;instance=SQLSERVER;encrypt=true;TrustServerCertificate=true;";
String user = "sa";
String pass = "";
try {
Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
Connection myConn = DriverManager.getConnection(dbURL, user, pass);
try {
Statement myStmt = myConn.createStatement();
try {
ResultSet myRs = myStmt.executeQuery("Select * from Login");
while (myRs.next())
{
System.out.println(myRs.getString("Username"));
System.out.println(myRs.getString("Password"));
}
}
catch (Exception e)
{
System.out.println("Error with query");
}
}
catch (Exception e)
{
System.out.println("Error connecting to database");
}
}
catch (Exception e)
{
System.out.println(e);
}
}
}
是否启用了"命名管道"one_answers"TCP/IP"
-
打开"Sql Server Configuration Manager"应用程序。
-
在左侧窗格中,转到"SQL Server网络配置"->'[实例名称]的协议
-
右键单击"命名管道"one_answers"TCP/IP",然后选择"启用"。
您使用了正确的端口吗
-
双击"TCP/IP"
-
选择"IP地址"选项卡
-
滚动至IPAII。您的端口号在这里。
- 重新启动"SQL Server([实例名称])"窗口服务
此错误通常发生在SQL server不接受TCP/IP连接时,请尝试以下步骤,它肯定会起作用。
1) 打开"运行并添加"命令SQLServerManager15.2.msc2) 点击网络配置;MSSQLSERVER协议";3) 选择协议名称-";TCP/IP";并确保它是启用的,如果不是,请启用它。4) 检查属性并在IP地址选项卡中查找端口。
重新启动服务器,它应该工作
我查看ERRORLOG
文件以获取故障排除信息。此文件通常位于:
C:Program FilesMicrosoft SQL ServerMSSQL<nn>.<instance name>MSSQLLogERRORLOG
<nn>
是SQL Server版本号,<instance name>
是实例名称。文件开头包含有用的信息:
2023-04-01 11:11:44.15 Server Microsoft SQL Server 2012 (SP1) - 11.0.3156.0 (X64)
May 4 2015 18:48:09
Copyright (c) Microsoft Corporation
Standard Edition (64-bit) on Windows NT 6.2 <X64> (Build 9200: ) (Hypervisor)
.
.
.
2023-04-01 11:11:44.16 Server Server process ID is 4668.
.
.
.
2023-04-01 11:11:44.16 Server Command Line Startup Parameters:
-s "SQLSERVER_INSTANCE_2"
.
.
.
2023-04-01 11:11:45.12 spid4s Server name is 'SQLMACHINE1SQLSERVER_INSTANCE_2'. This is an informational message only. No user action is required.
.
.
.
2023-04-01 11:11:45.16 spid10s Server is listening on [ 'any' <ipv6> 1433].
2023-04-01 11:11:45.16 spid10s Server is listening on [ 'any' <ipv4> 1433].
2023-04-01 11:11:45.16 spid10s Server local connection provider is ready to accept connection on [ \.pipeSQLLocalSQLSERVER_INSTANCE_2 ].
2023-04-01 11:11:45.16 spid10s Server local connection provider is ready to accept connection on [ \.pipeMSSQL$SQLSERVER_INSTANCE_2sqlquery ].
.
.
.
从以上内容中,您应该能够找到有关SQL Server实例的以下信息:
- 启动日期和时间
- 版本
- 进程ID
- 实例名称(默认实例为MSSQLSERVER)
- IP和端口号(如果启用了TCP/IP协议,1433是默认端口)
- 命名管道路径(即使禁用了命名管道协议)
一旦你有了这些信息,建立连接URL:
jdbc:sqlserver://[serverName[instanceName][:portNumber]][;property=value[;property=value]]
默认值用于未指定的url组件。请确保在字符串文字中转义。
请注意,当使用不带端口号的实例名称时,会向SQL Server浏览器服务发出请求。这也需要运行,UDP端口1434必须打开。
还要确保在同一页面上启用TCP/IP
我的解决方案:客户:DBeaverAuth:Windows身份验证
采取步骤后:
- 启用tcp/ip
- 启用命名管道
连接字符串:localhost\SQLEXPRESS(这个反斜杠起了很大的作用)。