解决idea [08S01] 无法连接 sql server 数据库,报错-驱动程序无法通过使用 ...

打印 上一主题 下一主题

主题 973|帖子 973|积分 2919

因为sql
server在jdbc连接的时候需要肯定的安全验证,只需要在dbURL中把;trustServerCertificate=true加上后令其跳过就行了
  1. import java.sql.Connection;
  2. import java.sql.DriverManager;
  3. import java.sql.*;
  4. public class Main {
  5.     private static Connection dbConn = null;
  6.     public static void main(String[] args) {
  7.         String dbURL = "jdbc:sqlserver://localhost:1433;database=sjkjc;";//这里输入自己的数据库名称(即将Stu改为你自己的数据库名称)其余都可以不做修改
  8.         try {
  9.             //1.加载驱动
  10.             Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
  11.             System.out.println("加载驱动成功!");
  12.             //2.连接
  13.             dbConn = DriverManager.getConnection(dbURL, "sa", "123");//这里的密码改为第一步你所修改的密码,用户名一般就为"sa"
  14.             System.out.println("连接数据库成功!");
  15.             String sql="select Sname from Student";//这个语句就是表的查询语句,按照你所建的表修改名称
  16.             PreparedStatement statement=null;
  17.             statement=dbConn.prepareStatement(sql);
  18.             ResultSet res=null;
  19.             res=statement.executeQuery();
  20.             while(res.next()){
  21.                 String title=res.getString("sname");
  22.                 System.out.println(title);
  23.             }
  24.         }catch(Exception e) {
  25.             e.printStackTrace();
  26.             System.out.println("连接数据库失败!");
  27.         }
  28.     }
  29. }
复制代码
上面的代码报错如下:
  1. D:\JDK\jdk-11.0.18\bin\java.exe "-javaagent:D:\idea\IntelliJ IDEA 2023.1\lib\idea_rt.jar=54456:D:\idea\IntelliJ IDEA 2023.1\bin" -Dfile.encoding=UTF-8 -classpath C:\Users\张艺达\IdeaProjects\untitled\out\production\untitled;D:\JDBC\sqljdbc_12.2\chs\mssql-jdbc-12.2.0.jre11.jar Main
  2. 加载驱动成功!
  3. com.microsoft.sqlserver.jdbc.SQLServerException: 驱动程序无法通过使用安全套接字层(SSL)加密与 SQL Server 建立安全连接。错误:“PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target”。 ClientConnectionId:90f72b77-2a96-4ca6-b51f-995cd5499215
  4.         at com.microsoft.sqlserver.jdbc.SQLServerConnection.terminate(SQLServerConnection.java:3937)
  5.         at com.microsoft.sqlserver.jdbc.TDSChannel.enableSSL(IOBuffer.java:1950)
  6.         at com.microsoft.sqlserver.jdbc.SQLServerConnection.connectHelper(SQLServerConnection.java:3456)
  7.         at com.microsoft.sqlserver.jdbc.SQLServerConnection.login(SQLServerConnection.java:3077)
  8.         at com.microsoft.sqlserver.jdbc.SQLServerConnection.connectInternal(SQLServerConnection.java:2919)
  9.         at com.microsoft.sqlserver.jdbc.SQLServerConnection.connect(SQLServerConnection.java:1787)
  10.         at com.microsoft.sqlserver.jdbc.SQLServerDriver.connect(SQLServerDriver.java:1229)
  11.         at java.sql/java.sql.DriverManager.getConnection(DriverManager.java:677)
  12.         at java.sql/java.sql.DriverManager.getConnection(DriverManager.java:228)
  13.         at Main.main(Main.java:15)
  14. Caused by: javax.net.ssl.SSLHandshakeException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
  15.         at java.base/sun.security.ssl.Alert.createSSLException(Alert.java:131)
  16.         at java.base/sun.security.ssl.TransportContext.fatal(TransportContext.java:369)
  17.         at java.base/sun.security.ssl.TransportContext.fatal(TransportContext.java:312)
  18.         at java.base/sun.security.ssl.TransportContext.fatal(TransportContext.java:307)
  19.         at java.base/sun.security.ssl.CertificateMessage$T12CertificateConsumer.checkServerCerts(CertificateMessage.java:654)
  20.         at java.base/sun.security.ssl.CertificateMessage$T12CertificateConsumer.onCertificate(CertificateMessage.java:473)
  21.         at java.base/sun.security.ssl.CertificateMessage$T12CertificateConsumer.consume(CertificateMessage.java:369)
  22.         at java.base/sun.security.ssl.SSLHandshake.consume(SSLHandshake.java:392)
  23.         at java.base/sun.security.ssl.HandshakeContext.dispatch(HandshakeContext.java:478)
  24.         at java.base/sun.security.ssl.HandshakeContext.dispatch(HandshakeContext.java:456)
  25.         at java.base/sun.security.ssl.TransportContext.dispatch(TransportContext.java:199)
  26.         at java.base/sun.security.ssl.SSLTransport.decode(SSLTransport.java:172)
  27.         at java.base/sun.security.ssl.SSLSocketImpl.decode(SSLSocketImpl.java:1383)
  28.         at java.base/sun.security.ssl.SSLSocketImpl.readHandshakeRecord(SSLSocketImpl.java:1296)
  29.         at java.base/sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:416)
  30.         at java.base/sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:388)
  31.         at com.microsoft.sqlserver.jdbc.TDSChannel.enableSSL(IOBuffer.java:1839)
  32.         ... 8 more
  33. Caused by: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
  34.         at java.base/sun.security.validator.PKIXValidator.doBuild(PKIXValidator.java:439)
  35.         at java.base/sun.security.validator.PKIXValidator.engineValidate(PKIXValidator.java:306)
  36.         at java.base/sun.security.validator.Validator.validate(Validator.java:264)
  37.         at java.base/sun.security.ssl.X509TrustManagerImpl.validate(X509TrustManagerImpl.java:313)
  38.         at java.base/sun.security.ssl.X509TrustManagerImpl.checkTrusted(X509TrustManagerImpl.java:233)
  39.         at java.base/sun.security.ssl.X509TrustManagerImpl.checkServerTrusted(X509TrustManagerImpl.java:110)
  40.         at com.microsoft.sqlserver.jdbc.HostNameOverrideX509TrustManager.checkServerTrusted(SQLServerTrustManager.java:86)
  41.         at java.base/sun.security.ssl.AbstractTrustManagerWrapper.checkServerTrusted(SSLContextImpl.java:1510)
  42.         at java.base/sun.security.ssl.CertificateMessage$T12CertificateConsumer.checkServerCerts(CertificateMessage.java:638)
  43.         ... 20 more
  44. Caused by: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
  45.         at java.base/sun.security.provider.certpath.SunCertPathBuilder.build(SunCertPathBuilder.java:141)
  46.         at java.base/sun.security.provider.certpath.SunCertPathBuilder.engineBuild(SunCertPathBuilder.java:126)
  47.         at java.base/java.security.cert.CertPathBuilder.build(CertPathBuilder.java:297)
  48.         at java.base/sun.security.validator.PKIXValidator.doBuild(PKIXValidator.java:434)
  49.         ... 28 more
  50. 连接数据库失败!
  51. 进程已结束,退出代码0
复制代码
在dbURL中把;trustServerCertificate=true加上后就没有报错了
  1. import java.sql.Connection;
  2. import java.sql.DriverManager;
  3. import java.sql.*;
  4. public class Main {
  5.     private static Connection dbConn = null;
  6.     public static void main(String[] args) {
  7.         String dbURL = "jdbc:sqlserver://localhost:1433;database=sjkjc;trustServerCertificate=true";//这里输入自己的数据库名称(即将Stu改为你自己的数据库名称)其余都可以不做修改
  8.         try {
  9.             //1.加载驱动
  10.             Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
  11.             System.out.println("加载驱动成功!");
  12.             //2.连接
  13.             dbConn = DriverManager.getConnection(dbURL, "sa", "123");//这里的密码改为第一步你所修改的密码,用户名一般就为"sa"
  14.             System.out.println("连接数据库成功!");
  15.             String sql="select Sname from Student";//这个语句就是表的查询语句,按照你所建的表修改名称
  16.             PreparedStatement statement=null;
  17.             statement=dbConn.prepareStatement(sql);
  18.             ResultSet res=null;
  19.             res=statement.executeQuery();
  20.             while(res.next()){
  21.                 String title=res.getString("sname");
  22.                 System.out.println(title);
  23.             }
  24.         }catch(Exception e) {
  25.             e.printStackTrace();
  26.             System.out.println("连接数据库失败!");
  27.         }
  28.     }
  29. }
复制代码
无报错
因为sql server在jdbc连接的时候需要肯定的安全验证,
只需要在dbURL中把;trustServerCertificate=true加上后令其跳过就行了
学习网络安全技术的方法无非三种:
第一种是报网络安全专业,如今叫网络空间安全专业,主要专业课程:程序设计、计算机组成原理原理、数据结构、利用系统原理、数据库系统、 计算机网络、人工智能、天然语言处理、社管帐算、网络安全法律法规、网络安全、内容安全、数字取证、呆板学习,多媒体技术,信息检索、舆情分析等。
第二种是自学,就是在网上找资源、找教程,大概是想办法熟悉一-些大佬,抱紧大腿,不外这种方法很耗时间,而且学习没有规划,可能很长一段时间感觉自己没有进步,容易劝退。
如果你对网络安全入门感兴趣,那么你需要的话可以点击这里

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

写过一篇

金牌会员
这个人很懒什么都没写!
快速回复 返回顶部 返回列表