背景:
就写个简单的jdbc连接sqlserver数据库,用的是最新的JDK 24版本。
结果代码运行出现以下错误
数据库连接失败!
com.microsoft.sqlserver.jdbc.SQLServerException: 驱动程序无法通过使用安全套接字层(SSL)加密与 SQL Server 建立安全连接。错误:“No appropriate protocol (protocol is disabled or cipher suites are inappropriate)”。 ClientConnectionId:0f49ebb2-c949-49f7-acb6-c07929c83cd3
at com.microsoft.sqlserver.jdbc.SQLServerConnection.terminate(SQLServerConnection.java:3806)
at com.microsoft.sqlserver.jdbc.TDSChannel.enableSSL(IOBuffer.java:1906)
at com.microsoft.sqlserver.jdbc.SQLServerConnection.connectHelper(SQLServerConnection.java:3329)
at com.microsoft.sqlserver.jdbc.SQLServerConnection.login(SQLServerConnection.java:2950)
at com.microsoft.sqlserver.jdbc.SQLServerConnection.connectInternal(SQLServerConnection.java:2790)
at com.microsoft.sqlserver.jdbc.SQLServerConnection.connect(SQLServerConnection.java:1663)
at com.microsoft.sqlserver.jdbc.SQLServerDriver.connect(SQLServerDriver.java:1064)
at java.sql/java.sql.DriverManager.getConnection(DriverManager.java:613)
at java.sql/java.sql.DriverManager.getConnection(DriverManager.java:199)
at com.kaka.dao.SQLServerJDBC.main(SQLServerJDBC.java:27)
Caused by: javax.net.ssl.SSLHandshakeException: No appropriate protocol (protocol is disabled or cipher suites are inappropriate)
at java.base/sun.security.ssl.HandshakeContext.<init>(HandshakeContext.java:162)
at java.base/sun.security.ssl.ClientHandshakeContext.<init>(ClientHandshakeContext.java:103)
at java.base/sun.security.ssl.TransportContext.kickstart(TransportContext.java:245)
at java.base/sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:448)
at java.base/sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:426)
at com.microsoft.sqlserver.jdbc.TDSChannel.enableSSL(IOBuffer.java:1795)
... 8 more
解决方案:
1、找到java安装目录的conf\security

2、用记事本软件打开java.security文件,找到第737行,或者直接搜索关键字jdk.tls.disabledAlgorithms=SSLv3,如下所示,把红框的删除掉,然后保存文件。

3、再次运行代码
package com.kaka.dao;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
import java.sql.PreparedStatement;
import java.sql.SQLException;
public class SQLServerJDBC {
// 数据库连接信息
private static final String URL = "jdbc:sqlserver://127.0.0.1:1433;databaseName=Test-demo;encrypt=true;trustServerCertificate=true;sslProtocol=TLSv1";
private static final String USERNAME = "sa";
private static final String PASSWORD = "123456";
public static void main(String[] args) {
Connection connection = null;
Statement statement = null;
ResultSet resultSet = null;
try {
// 1. 加载驱动(JDBC 4.0+ 可以自动加载,这一步可选)
Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
// 2. 建立连接
connection = DriverManager.getConnection(URL, USERNAME, PASSWORD);
System.out.println("数据库连接成功!");
// 3. 创建Statement对象
statement = connection.createStatement();
// 4. 执行查询
String sql = "SELECT * FROM UserInfo";
resultSet = statement.executeQuery(sql);
// 5. 处理结果集
while (resultSet.next()) {
int id = resultSet.getInt("id");
String name = resultSet.getString("name");
System.out.println("ID: " + id + ", Name: " + name);
}
} catch (ClassNotFoundException e) {
System.err.println("找不到JDBC驱动!");
e.printStackTrace();
} catch (SQLException e) {
System.err.println("数据库连接失败!");
e.printStackTrace();
} finally {
// 6. 关闭资源
try {
if (resultSet != null) resultSet.close();
if (statement != null) statement.close();
if (connection != null) connection.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}
4、运行结果

3万+

被折叠的 条评论
为什么被折叠?



