簡體   English   中英

無法使用 Java JDBC 連接到 MySQL 數據庫

[英]Can't connect to MySQL Database with Java JDBC

我創建了一個簡單的類來測試與我使用 Mysql Workbench 創建的 localhost 數據庫的通信。 Mysql 服務器正在運行。 JDBC 驅動程序被添加到我的項目的類路徑中。

public class Database
{
    public static void main(String[] args)
            throws SQLException, ClassNotFoundException
    {
        Connection connection = null;
        String serverName = "localhost:3306";
        String databaseName = "detector_tests";
        String url = "jdbc:mysql://" + serverName + "/" + databaseName
                + "?useSSL=TRUE";

        String username = "simon";
        String password = "password123";
        connection = DriverManager.getConnection(url, username, password);
    }
}

當我運行程序時,出現以下異常:

線程“main”com.mysql.cj.jdbc.exceptions.CommunicationsException 中的異常:通信鏈接失敗

最后一個成功發送到服務器的數據包是 0 毫秒前。 驅動程序沒有收到來自服務器的任何數據包。 在 com.mysql.cj.jdbc.exceptions.SQLError.createCommunicationsException(SQLError.java:172) 在 com.mysql.cj.jdbc.exceptions.SQLExceptionsMapping.translateException(SQLExceptionsMapping.java:64) 在 com.mysql.cj.jdbc .ConnectionImpl.createNewIO(ConnectionImpl.java:862) at com.mysql.cj.jdbc.ConnectionImpl.(ConnectionImpl.java:444) at com.mysql.cj.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:230) at com .mysql.cj.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:226) at java.sql.DriverManager.getConnection(Unknown Source) at java.sql.DriverManager.getConnection(Unknown Source) at Database.main(Database.java: 17) 引起:com.mysql.cj.exceptions.CJCommunicationsException:通信鏈接失敗

最后一個成功發送到服務器的數據包是 0 毫秒前。 驅動程序沒有收到來自服務器的任何數據包。 在 sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) 在 sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source) 在 sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source) 在 java.lang.reflect.Constructor.newInstance(Unknown Source)在 com.mysql.cj.exceptions.ExceptionFactory.createException(ExceptionFactory.java:59) 在 com.mysql.cj.exceptions.ExceptionFactory.createException(ExceptionFactory.java:103) 在 com.mysql.cj.exceptions.ExceptionFactory.createException (ExceptionFactory.java:149) 在 com.mysql.cj.exceptions.ExceptionFactory.createCommunicationsException(ExceptionFactory.java:165) 在 com.mysql.cj.protocol.a.NativeProtocol.negotiateSSLConnection(NativeProtocol.java:355) 在 com。 mysql.cj.protocol.a.NativeAuthenticationProvider.negotiateSSLConnection(NativeAuthenticationProvider.java:789) at com.mysql.cj.protocol.a.NativeAuthenticationProvider.proceedHandshakeWithPluggableAuthentication(NativeAuthenticationProvider.java:499) at com.m ysql.cj.protocol.a.NativeAuthenticationProvider.connect(NativeAuthenticationProvider.java:217) at com.mysql.cj.protocol.a.NativeProtocol.connect(NativeProtocol.java:1411) at com.mysql.cj.NativeSession.connect( NativeSession.java:165) at com.mysql.cj.jdbc.ConnectionImpl.connectOneTryOnly(ConnectionImpl.java:982) at com.mysql.cj.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:852) ... 6 more作者:javax.net.ssl.SSLHandshakeException:java.security.cert.CertificateException:java.security.cert.CertPathValidatorException:路徑不與 sun.security.ssl.Alerts.getSSLException(未知來源)的任何信任錨鏈接在 sun.security.ssl.SSLSocketImpl.fatal(Unknown Source) at sun.security.ssl.Handshaker.fatalSE(Unknown Source) at sun.security.ssl.Handshaker.fatalSE(Unknown Source) at sun.security.ssl.ClientHandshaker .serverCertificate(Unknown Source) at sun.security.ssl.ClientHandshaker.processMessage(Unknown Source) at sun.security.ssl.Handshaker.processLoop(Unknown Sou) rce) at sun.security.ssl.Handshaker.process_record(Unknown Source) at sun.security.ssl.SSLSocketImpl.readRecord(Unknown Source) at sun.security.ssl.SSLSocketImpl.performInitialHandshake(Unknown Source) at sun.security.ssl .SSLSocketImpl.startHandshake(Unknown Source) at sun.security.ssl.SSLSocketImpl.startHandshake(Unknown Source) at com.mysql.cj.protocol.ExportControlled.performTlsHandshake(ExportControlled.java:213) at com.mysql.cj.protocol。 StandardSocketFactory.performTlsHandshake(StandardSocketFactory.java:206) at com.mysql.cj.protocol.a.NativeSocketConnection.performTlsHandshake(NativeSocketConnection.java:99) at com.mysql.cj.protocol.a.NativeProtocol.negotiateSSLConnection(NativeProtocol.java: 350) ... 13 多個導致:java.security.cert.CertificateException:java.security.cert.CertPathValidatorException:路徑不與 com.mysql.cj.protocol.ExportControlled$X509TrustManagerWrapper.checkServerTrusted 的任何信任錨鏈接(ExportControlled.java:280) 在 sun.security .ssl.AbstractTrustManagerWrapper.checkServerTrusted(Unknown Source) ... 25 多個原因:java.security.cert.CertPathValidatorException:路徑不與 sun.security.provider.certpath.PKIXCertPathValidator.validate(Unknown) 的任何信任錨鏈接來源)在 sun.security.provider.certpath.PKIXCertPathValidator.engineValidate(未知來源)在 java.security.cert.CertPathValidator.validate(未知來源)在 com.mysql.cj.protocol.ExportControlled$X509TrustManagerWrapper.checkServerTrusted(ExportControlled.java) :273) ... 26

看來我需要添加某種證書什么的。 我不確定,因為我對數據庫很陌生。 任何有相同經驗或解決方案的人? 如果您需要更多信息,我很樂意編輯帖子。

提前致謝!

似乎您正在嘗試將 mysql 數據庫與證書一起連接。 如果您通過 TLS 連接到 MySQL 實例,則需要有一個信任存儲來保存您的證書。 請參閱此文檔以創建 MySQL 連接以及 TLS 連接。

但是,您可以通過在 MySQL 連接 URL 中為“useSSL”設置 FALSE 來忽略 TLS 驗證。 您的代碼如下。

 public class Database { public static void main(String[] args) throws SQLException, ClassNotFoundException { Connection connection = null; String serverName = "localhost:3306"; String databaseName = "detector_tests"; String url = "jdbc:mysql://" + serverName + "/" + databaseName + "?useSSL=FALSE"; String username = "simon"; String password = "password123"; connection = DriverManager.getConnection(url, username, password); } }

希望這將是您問題的答案。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM