小小编程家 2024-12-01 10:17 采纳率: 50%
浏览 46

eclipse连接SQL server数据库


package jdbc;
 

import java.sql.*;
 
public class  jdbc {

    public static void main(String[] args) {
     
        // 数据库连接URL
        String url="jdbc:sqlserver://localhost:1433;databaseName=ScoreDB;encrypt=false";
        // 数据库用户名7
        String username = "sa";
        // 数据库密码
        String password = "123456";

        Connection connection = null;
         

         
       
       
        try {
            // 加载JDBC驱动
            Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
            System.out.println("加载驱动成功");
            // 建立数据库连接
            connection = DriverManager.getConnection(url, username, password);

            if (connection!= null) {
                System.out.println("成功连接到SQL Server数据库!");
            } else {
                System.out.println("连接失败!");
            }
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
            System.out.println("找不到JDBC驱动类!");
        } catch (SQLException e) {
            e.printStackTrace();
            System.out.println("数据库连接出现错误!");
        } finally {
            // 关闭数据库连接
            if (connection!= null) {
                try {
                    connection.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }
        }
    }
}

出现以下问题,求助!
com.microsoft.sqlserver.jdbc.SQLServerException: “Encrypt”属性设置为“true”且 “trustServerCertificate”属性设置为“false”,但驱动程序无法使用安全套接字层 (SSL) 加密与 SQL Server 建立安全连接:错误:PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target。 ClientConnectionId:a622fad0-6d75-4cf9-88ec-6bcfe0c8874b
    at com.microsoft.sqlserver.jdbc.SQLServerConnection.terminate(SQLServerConnection.java:4271)
    at com.microsoft.sqlserver.jdbc.TDSChannel.enableSSL(IOBuffer.java:1965)
    at com.microsoft.sqlserver.jdbc.SQLServerConnection.connectHelper(SQLServerConnection.java:3797)
    at com.microsoft.sqlserver.jdbc.SQLServerConnection.login(SQLServerConnection.java:3385)
    at com.microsoft.sqlserver.jdbc.SQLServerConnection.connectInternal(SQLServerConnection.java:3194)
    at com.microsoft.sqlserver.jdbc.SQLServerConnection.connect(SQLServerConnection.java:1971)
    at com.microsoft.sqlserver.jdbc.SQLServerDriver.connect(SQLServerDriver.java:1263)
    at java.sql/java.sql.DriverManager.getConnection(DriverManager.java:683)
    at java.sql/java.sql.DriverManager.getConnection(DriverManager.java:230)
    at Experience_6/jdbc.jdbc.main(jdbc.java:25)
Caused by: javax.net.ssl.SSLHandshakeException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
    at java.base/sun.security.ssl.Alert.createSSLException(Alert.java:130)
    at java.base/sun.security.ssl.TransportContext.fatal(TransportContext.java:378)
    at java.base/sun.security.ssl.TransportContext.fatal(TransportContext.java:321)
    at java.base/sun.security.ssl.TransportContext.fatal(TransportContext.java:316)
    at java.base/sun.security.ssl.CertificateMessage$T12CertificateConsumer.checkServerCerts(CertificateMessage.java:647)
    at java.base/sun.security.ssl.CertificateMessage$T12CertificateConsumer.onCertificate(CertificateMessage.java:467)
    at java.base/sun.security.ssl.CertificateMessage$T12CertificateConsumer.consume(CertificateMessage.java:363)
    at java.base/sun.security.ssl.SSLHandshake.consume(SSLHandshake.java:393)
    at java.base/sun.security.ssl.HandshakeContext.dispatch(HandshakeContext.java:476)
    at java.base/sun.security.ssl.HandshakeContext.dispatch(HandshakeContext.java:447)
    at java.base/sun.security.ssl.TransportContext.dispatch(TransportContext.java:201)
    at java.base/sun.security.ssl.SSLTransport.decode(SSLTransport.java:172)
    at java.base/sun.security.ssl.SSLSocketImpl.decode(SSLSocketImpl.java:1506)
    at java.base/sun.security.ssl.SSLSocketImpl.readHandshakeRecord(SSLSocketImpl.java:1421)
    at java.base/sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:455)
    at java.base/sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:426)
    at com.microsoft.sqlserver.jdbc.TDSChannel.enableSSL(IOBuffer.java:1854)
    ... 8 more
Caused by: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
    at java.base/sun.security.validator.PKIXValidator.doBuild(PKIXValidator.java:388)
    at java.base/sun.security.validator.PKIXValidator.engineValidate(PKIXValidator.java:271)
    at java.base/sun.security.validator.Validator.validate(Validator.java:256)
    at java.base/sun.security.ssl.X509TrustManagerImpl.checkTrusted(X509TrustManagerImpl.java:241)
    at java.base/sun.security.ssl.X509TrustManagerImpl.checkServerTrusted(X509TrustManagerImpl.java:113)
    at com.microsoft.sqlserver.jdbc.HostNameOverrideX509TrustManager.checkServerTrusted(SQLServerTrustManager.java:88)
    at java.base/sun.security.ssl.AbstractTrustManagerWrapper.checkServerTrusted(SSLContextImpl.java:1430)
    at java.base/sun.security.ssl.CertificateMessage$T12CertificateConsumer.checkServerCerts(CertificateMessage.java:631)
    ... 20 more
Caused by: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
    at java.base/sun.security.provider.certpath.SunCertPathBuilder.build(SunCertPathBuilder.java:148)
    at java.base/sun.security.provider.certpath.SunCertPathBuilder.engineBuild(SunCertPathBuilder.java:129)
    at java.base/java.security.cert.CertPathBuilder.build(CertPathBuilder.java:297)
    at java.base/sun.security.validator.PKIXValidator.doBuild(PKIXValidator.java:383)
    ... 27 more
数据库连接出现错误!

  • 写回答

1条回答 默认 最新

  • 关注

    以下回复参考:皆我百晓生券券喵儿等免费微信小程序作答:

    从你给出的错误信息来看,这是一个SSL连接问题。当尝试通过SSL连接到SQL Server时,Java无法找到有效的证书路径。这通常发生在以下情况下:

    1. 你使用的Java版本与SQL Server版本不兼容。
    2. 你的Java环境没有正确配置SSL证书。
    3. 你的连接字符串中使用了SSL连接相关的参数,但是实际上并没有配置SSL连接。例如在你的连接字符串中,"encrypt"参数设置为true,"trustServerCertificate"没有设置或设置为false,表示需要客户端证书和密钥验证服务器的SSL证书链是否可信,但实际并未配置正确的证书和密钥。如果SQL Server并未配置SSL或者客户端未提供正确的证书信息,那么就会抛出这个错误。

    为了解决这个问题,你可以尝试以下步骤:

    1. 确保你的Java版本与SQL Server版本兼容。如果你不确定应该使用哪个版本的Java,可以查看SQL Server的文档或向你的数据库管理员询问。
    2. 如果你不打算使用SSL连接,你可以修改你的连接字符串中的"encrypt"参数为false,同时确认"trustServerCertificate"参数的值不需要设置或设置为true(当你知道你的SQL Server的证书是可信的)。但是这样做会丧失通过SSL提供的安全保护,所以一般只有在你知道服务器的安全策略,以及当前网络环境下的安全性时才推荐这样做。连接字符串示例如下:
    String url = "jdbc:sqlserver://localhost:1433;databaseName=ScoreDB;encrypt=false;trustServerCertificate=true";
    

    注意:在生产环境中,为了安全起见,通常建议开启SSL连接并验证服务器的证书。如果你的SQL Server已经配置了SSL,你需要获取SQL Server的证书并配置Java环境来信任这个证书。这个过程比较复杂并且因环境而异,具体步骤可能需要查阅Java和SQL Server的相关文档。

    评论

报告相同问题?

问题事件

  • 创建了问题 12月1日