当前位置: 首页 > 知识库问答 >
问题:

Java JDBC Intellij和SQLServer Experss

范哲
2023-03-14

由于某些原因,我的sql server数据库无法连接到我的intellij java应用程序。这是我第一次这么做,所以我不明白我做错了什么。

我用来连接数据库的代码是。

导入java.sql.*;

public class StudentDatabase{

static Connection con ;
static String driver = "com.microsoft.sqlserver.jdbc.SQLServerDriver"; //com.microsoft.sqlserver.jdbc.SQLServerDriver
static String url = "jdbc:sqlserver://frensis\\sqlexpress;databaseName=StudentDatabase";
static String username = "Frensis\\Grid_Computers";
static String userpass = "";

public static Connection getConnection() {
    try {
        if (con == null) {
            Class.forName(driver);
            con = DriverManager.getConnection(url, username, userpass);

        }
    } catch (ClassNotFoundException ex)
    {
        ex.printStackTrace();
    }
    catch (SQLException ex)
    {
        ex.printStackTrace();
        System.out.println("Error Connecting to Database");
    }
    return con;
}

}

我得到的错误是。

“C:\Program Files\Java\jdk-17.0.2\bin\Java.exe”-javaagent:C:\Program Files\JetBrains\IntelliJ IDEA Community Edition 2021.2.3\lib\IDEA_rt.jar=55405:C:\Program Files\JetBrains\IntelliJ IDEA Community Edition 2021.2.3\bin”-Dfile。encoding=UTF-8-类路径C:\Users\Grid\u Computers\IdeaProjects\BilancStudentApp\out\production\BilancStudentApp;C:\Users\Grid_Computers\OneDrive\Desktop\sqljdbc_10.2\chs\mssql-jdbc-10.2.0。jre8。罐子C:\Users\Grid_Computers\OneDrive\Desktop\sqljdbc_10.2\chs\mssql-jdbc-10.2.0。jre11。罐子C:\Users\Grid_Computers\OneDrive\Desktop\sqljdbc_10.2\chs\mssql-jdbc-10.2.0。jre17。jar StudentAppcom。微软sqlserver。jdbc。SQLServerException:与主机frensis端口1433的TCP/IP连接失败。错误:“连接超时。请验证连接属性。确保SQL Server实例正在主机上运行,并在端口接受TCP/IP连接。确保到端口的TCP连接未被防火墙阻止。” 在com上。微软sqlserver。jdbc。SQLServerException。makeFromDriverError(SQLServerException.java:237)在com上。微软sqlserver。jdbc。SQLServerException。ConvertConnectExceptionToSQLServerException(SQLServerException.java:288)在com上。微软sqlserver。jdbc。SocketFinder。findSocket(IOBuffer.java:2720)在com上。微软sqlserver。jdbc。谢内尔。在com上打开(IOBuffer.java:761)。微软sqlserver。jdbc。SQLServerConnection。connectHelper(SQLServerConnection.java:3180)在com上。微软sqlserver。jdbc。SQLServerConnection。登录(SQLServerConnection.java:2833)com。微软sqlserver。jdbc。SQLServerConnection。ConnectionInternal(SQLServerConnection.java:2671)在com上。微软sqlserver。jdbc。SQLServerConnection。连接(SQLServerConnection.java:1640)在com上。微软sqlserver。jdbc。SQLServerDriver。在java上连接(SQLServerDriver.java:936)sql/java。sql。司机经理。getConnection(DriverManager.java:681)位于java。sql/java。sql。司机经理。getConnection(DriverManager.java:229)位于StudentDatabase。getConnection(StudentDatabase.java:15)位于StudentApp。main(StudentApp.java:7)连接到数据库时出错

用退出代码0完成的进程

你能指导我如何解决这个问题,或者如何更改我的代码,以便我能够成功连接它吗?

经过几次更改后,我发现了一个与SSL相关的新错误:

"C:\Program Files\Java\jdk-17.0.2\bin\java.exe" "-javaagent:C:\Program Files\JetBrains\IntelliJ IDEA Community Edition 2021.2.3\lib\idea_rt.jar=52938:C:\Program Files\JetBrains\IntelliJ IDEA Community Edition 2021.2.3\bin" -Dfile.encoding=UTF-8 -classpath C:\Users\Grid_Computers\IdeaProjects\BilancStudentApp\out\production\BilancStudentApp;C:\Users\Grid_Computers\OneDrive\Desktop\sqljdbc_10.2\enu\mssql-jdbc-10.2.0.jre8.jar;C:\Users\Grid_Computers\OneDrive\Desktop\sqljdbc_10.2\enu\mssql-jdbc-10.2.0.jre11.jar;C:\Users\Grid_Computers\OneDrive\Desktop\sqljdbc_10.2\enu\mssql-jdbc-10.2.0.jre17.jar StudentApp
com.microsoft.sqlserver.jdbc.SQLServerException: The driver could not establish a secure connection to SQL Server by using Secure Sockets Layer (SSL) encryption. Error: "PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target". ClientConnectionId:58113aa8-cf71-4e9c-8d63-8820be9c1ab8
    at com.microsoft.sqlserver.jdbc.SQLServerConnection.terminate(SQLServerConnection.java:3680)
    at com.microsoft.sqlserver.jdbc.TDSChannel.enableSSL(IOBuffer.java:2113)
    at com.microsoft.sqlserver.jdbc.SQLServerConnection.connectHelper(SQLServerConnection.java:3204)
    at com.microsoft.sqlserver.jdbc.SQLServerConnection.login(SQLServerConnection.java:2833)
    at com.microsoft.sqlserver.jdbc.SQLServerConnection.connectInternal(SQLServerConnection.java:2671)
    at com.microsoft.sqlserver.jdbc.SQLServerConnection.connect(SQLServerConnection.java:1640)
    at com.microsoft.sqlserver.jdbc.SQLServerDriver.connect(SQLServerDriver.java:936)
    at java.sql/java.sql.DriverManager.getConnection(DriverManager.java:681)
    at java.sql/java.sql.DriverManager.getConnection(DriverManager.java:229)
    at StudentDatabase.getConnection(StudentDatabase.java:15)
    at StudentApp.main(StudentApp.java:7)
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:131)
    at java.base/sun.security.ssl.TransportContext.fatal(TransportContext.java:371)
    at java.base/sun.security.ssl.TransportContext.fatal(TransportContext.java:314)
    at java.base/sun.security.ssl.TransportContext.fatal(TransportContext.java:309)
    at java.base/sun.security.ssl.CertificateMessage$T12CertificateConsumer.checkServerCerts(CertificateMessage.java:654)
    at java.base/sun.security.ssl.CertificateMessage$T12CertificateConsumer.onCertificate(CertificateMessage.java:473)
    at java.base/sun.security.ssl.CertificateMessage$T12CertificateConsumer.consume(CertificateMessage.java:369)
    at java.base/sun.security.ssl.SSLHandshake.consume(SSLHandshake.java:396)
    at java.base/sun.security.ssl.HandshakeContext.dispatch(HandshakeContext.java:480)
    at java.base/sun.security.ssl.HandshakeContext.dispatch(HandshakeContext.java:458)
    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:1500)
    at java.base/sun.security.ssl.SSLSocketImpl.readHandshakeRecord(SSLSocketImpl.java:1415)
    at java.base/sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:450)
    at java.base/sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:421)
    at com.microsoft.sqlserver.jdbc.TDSChannel.enableSSL(IOBuffer.java:2021)
    ... 9 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:439)
    at java.base/sun.security.validator.PKIXValidator.engineValidate(PKIXValidator.java:306)
    at java.base/sun.security.validator.Validator.validate(Validator.java:264)
    at java.base/sun.security.ssl.X509TrustManagerImpl.checkTrusted(X509TrustManagerImpl.java:242)
    at java.base/sun.security.ssl.X509TrustManagerImpl.checkServerTrusted(X509TrustManagerImpl.java:113)
    at com.microsoft.sqlserver.jdbc.TDSChannel$HostNameOverrideX509TrustManager.checkServerTrusted(IOBuffer.java:1702)
    at java.base/sun.security.ssl.AbstractTrustManagerWrapper.checkServerTrusted(SSLContextImpl.java:1441)
    at java.base/sun.security.ssl.CertificateMessage$T12CertificateConsumer.checkServerCerts(CertificateMessage.java:638)
    ... 21 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:141)
    at java.base/sun.security.provider.certpath.SunCertPathBuilder.engineBuild(SunCertPathBuilder.java:126)
    at java.base/java.security.cert.CertPathBuilder.build(CertPathBuilder.java:297)
    at java.base/sun.security.validator.PKIXValidator.doBuild(PKIXValidator.java:434)
    ... 28 more
Error Connecting to Database

Process finished with exit code 0

共有1个答案

卢健
2023-03-14

仔细检查JDBC url,如果没有问题,请确保MS SQL Server允许Configuration Manager中的JDBC连接,尤其是:

  • 启用TCP/IP协议

您可以通过步骤和屏幕截图查看本指南。

 类似资料:
  • 问题内容: 关于它们有很多传说。我想知道真相。以下两个示例之间有什么区别? 问题答案: 不确定从何处获得传说,但: 提交按钮 与: IE6将在标记之间提交此按钮的所有文本,其他浏览器将仅提交值。使用可使您在按钮的设计上享有更大的布局自由度。从各种意图和目的看,它乍一看似乎很棒,但是各种浏览器怪癖使它有时很难使用。 在您的示例中,IE6将发送到服务器,而其他大多数浏览器将不发送任何内容。要使其跨浏览

  • 什么区别以及如何正确重写代码?

  • 我试图理解为什么下面两个代码块会产生不同的结果。 代码块1按预期工作,并返回从数据库中查找的提供程序的数组。另一方面,代码块2返回函数数组。在理解promissione.all()和async/await时,我觉得缺少了一些简单的东西。 代码块的差异如下: > 块1:创建许诺函数数组,然后使用map运算符将其包装在异步函数中。 块2:许诺函数的数组被创建为异步函数。因此,不调用map运算符。 如果

  • 问题内容: 我才刚刚开始研究SQL。 我有一个SQL Server 2008r2数据库,它将返回两个字段DocDate和InvValue。我需要将InvValues汇总为今天的MTD和YTD,所以看起来像 我已经做了大量的Google搜寻,并且可以使用SUM&DATEPART进行一项或多项,但是我坚持尝试两者兼而有之。 有人可以给我一些伪代码,以帮助我进一步谷歌。 谢谢@戈登·利诺夫(Gordon

  • 这个示例代码来自一本Java书籍,从墙上的99瓶啤酒到没有啤酒打印出这首歌。问题是,当墙上是1瓶啤酒时,它仍然写着瓶子。我试图通过在末尾添加部分来解决这个问题。但是,它仍然显示1瓶啤酒在墙上,我瓶啤酒在墙上。 我不知道该改变什么来解决这个问题。是否创建另一个while部分? 如果你能给他们一个提示,这样我就可以自己解决它,那也很酷!因为我知道我的实际歌曲输出是在第一个if部分,但我不知道我应该在哪

  • 原文地址:https://cesiumjs.org/tutorials/cesium-and-webpack/ Cesium 和 Webpack Webpack是非常强大非常流行的JavaScript 模块打包工具。它可以让开发人员以一种简单直观的 require 方式去加载各种页面需要的文件,极大的方便了开源人员对代码和资源文件进行结构化设计。当编译的时候,它会跟踪代码依赖性,把所有的模型打包到

  • 问题内容: 我一直在学习redis和node.js。我有两个问题,找不到令人满意的答案。 我的第一个问题是关于在node.js中重用Redis客户端。我找到了这个问题和答案:如何在socket.io中重用Redis连接,但还不足以让我满意。 现在,如果我在连接事件中创建redis客户端,它将为每个连接生成。因此,如果我有2万个并发用户,那么将有2万个Redis客户端。 如果我将其放在连接事件之外,

  • 我需要控制日志框架的最大磁盘空间量。 例如,在log4j中,如果有如下所示的追加器,我可以很容易地估计需要多少磁盘空间: 对于maxFileSize和maxBackupIndex,我知道最多需要10x100KB。 我注意到DailyRollingFileAppender,但它不支持maxFileSize。 除了RollingFileAppender之外,是否还有其他fileappender可以实现