国产av日韩一区二区三区精品,成人性爱视频在线观看,国产,欧美,日韩,一区,www.成色av久久成人,2222eeee成人天堂

Beheben von ?Kommunikationsverbindungsfehlern' mit JDBC und MySQL
P粉038161873
P粉038161873 2023-08-24 15:46:59
0
1
631
<p>我正在嘗試連接到本地 MySQL 服務(wù)器,但不斷收到錯誤消息。</p> <p>這是代碼。</p> <pre class="brush:php;toolbar:false;">public class Connect { public static void main(String[] args) { Connection conn = null; try { String userName = "myUsername"; String password = "myPassword"; String url = "jdbc:mysql://localhost:3306/myDatabaseName"; Class.forName("com.mysql.jdbc.Driver").newInstance(); conn = DriverManager.getConnection(url, userName, password); System.out.println("Database connection established"); } catch (Exception e) { System.err.println("Cannot connect to database server"); System.err.println(e.getMessage()); e.printStackTrace(); } finally { if (conn != null) { try { conn.close(); System.out.println("Database Connection Terminated"); } catch (Exception e) {} } } } }</pre> <p>以及錯誤:</p> <pre class="brush:php;toolbar:false;">Cannot connect to database server Communications link failure The last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server. com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure The last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server. at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39) at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27) at java.lang.reflect.Constructor.newInstance(Constructor.java:513) at com.mysql.jdbc.Util.handleNewInstance(Util.java:411) at com.mysql.jdbc.SQLError.createCommunicationsException(SQLError.java:1116) at com.mysql.jdbc.MysqlIO.<init>(MysqlIO.java:344) at com.mysql.jdbc.ConnectionImpl.coreConnect(ConnectionImpl.java:2333) at com.mysql.jdbc.ConnectionImpl.connectOneTryOnly(ConnectionImpl.java:2370) at com.mysql.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:2154) at com.mysql.jdbc.ConnectionImpl.<init>(ConnectionImpl.java:792) at com.mysql.jdbc.JDBC4Connection.<init>(JDBC4Connection.java:47) at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39) at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27) at java.lang.reflect.Constructor.newInstance(Constructor.java:513) at com.mysql.jdbc.Util.handleNewInstance(Util.java:411) at com.mysql.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:381) at com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:305) at java.sql.DriverManager.getConnection(DriverManager.java:582) at java.sql.DriverManager.getConnection(DriverManager.java:185) at Connect.main(Connect.java:16) Caused by: java.net.ConnectException: Connection refused at java.net.PlainSocketImpl.socketConnect(Native Method) at java.net.PlainSocketImpl.doConnect(PlainSocketImpl.java:351) at java.net.PlainSocketImpl.connectToAddress(PlainSocketImpl.java:213) at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:200) at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:366) at java.net.Socket.connect(Socket.java:529) at java.net.Socket.connect(Socket.java:478) at java.net.Socket.<init>(Socket.java:375) at java.net.Socket.<init>(Socket.java:218) at com.mysql.jdbc.StandardSocketFactory.connect(StandardSocketFactory.java:257) at com.mysql.jdbc.MysqlIO.<init>(MysqlIO.java:294) ... 15 more</pre> <p>我已經(jīng)設(shè)置了類路徑,確保 my.cnf 已注釋掉跳過網(wǎng)絡(luò)選項。 </p> <p>java版本是1.2.0_26(64位) mysql 5.5.14 mysql連接器5.1.17</p> <p>我確保用戶有權(quán)訪問我的數(shù)據(jù)庫。</p>
P粉038161873
P粉038161873

Antworte allen(1)
P粉068486220

我的兩個程序中也遇到了同樣的問題。我的錯誤是這樣的:

com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure

The last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server.

我花了幾天時間才解決這個問題。我測試了不同網(wǎng)站上提到的許多方法,但沒有一個有效。最后我更改了代碼并找出了問題所在。我將嘗試向您介紹不同的方法,并在此處進(jìn)行總結(jié)。

當(dāng)我在互聯(lián)網(wǎng)上尋找此錯誤的解決方案時,我發(fā)現(xiàn)有許多解決方案至少對一個人有效,但其他人卻說這對他們不起作用!

strong> 為什么有很多方法可以解決這個錯誤? 看起來通常當(dāng)連接到服務(wù)器時出現(xiàn)問題時,就會發(fā)生此錯誤。也許問題是因為錯誤的查詢字符串或與數(shù)據(jù)庫的連接太多。

所以我建議你一一嘗試所有的解決方案,不要放棄!

以下是我在互聯(lián)網(wǎng)上找到的解決方案,對于每個解決方案,至少有一個人的問題已通過該解決方案得到解決。

提示:需要更改MySQL設(shè)置的解決方案可以參考以下文件:

  • Linux:/etc/mysql/my.cnf/etc/my.cnf(取決于 Linux 發(fā)行版和使用的 MySQL 軟件包) p>

  • Windows:C:\**ProgramData**\MySQL\MySQL Server 5.6\my.ini(注意它是 ProgramData,而不是 Program Files)

以下是解決方案:

  • 更改bind-address屬性:

    取消注釋 bind-address 屬性或?qū)⑵涓臑橐韵?IP 之一:

    bind-address="127.0.0.1"

    bind-address="0.0.0.0"
  • 注釋掉“skip-networking”

    如果 MySQL 配置文件中有 skip-networking 行,請在該行的開頭添加 # 符號將其注釋。

  • 更改“wait_timeout”和“interactive_timeout”

    將這些行添加到 MySQL 配置文件:

    [wait_timeout][1] = *number*
    
    interactive_timeout = *number*
    
    connect_timeout = *number*
  • 確保 Java 不會將“l(fā)ocalhost”翻譯為 [:::1] 而不是 [127.0.0.1]

    由于 MySQL 可以識別 127.0.0.1 (IPv4),但不能識別 :::1 (IPv6)

    可以通過使用以下兩種方法之一來避免這種情況:

    1. 在連接字符串中使用 127.0.0.1 而不是 localhost 以避免 localhost 被轉(zhuǎn)換為 ::: 1

    2. 使用選項-Djava.net.preferIPv4Stack=true運行java以強(qiáng)制java使用IPv4而不是IPv6。在 Linux 上,這也可以通過運行(或?qū)⑵浞湃?/etc/profile 中來實現(xiàn):

      export _JAVA_OPTIONS="-Djava.net.preferIPv4Stack=true"
  • 檢查操作系統(tǒng)代理設(shè)置、防火墻和防病毒程序

    確保防火墻或防病毒軟件沒有阻止 MySQL 服務(wù)。

    在 Linux 上暫時停止 iptables。如果 iptables 配置錯誤,它們可能允許 tcp 數(shù)據(jù)包發(fā)送到 mysql 端口,但阻止 tcp 數(shù)據(jù)包返回同一連接。

    # Redhat enterprise and CentOS
     systemctl stop iptables.service
     # Other linux distros
     service iptables stop

    停止 Windows 上的防病毒軟件。

  • 更改連接字符串

    檢查您的查詢字符串。你的連接字符串應(yīng)該是這樣的:

    dbName = "my_database";
    dbUserName = "root";
    dbPassword = "";
    String connectionString = "jdbc:mysql://localhost/" + dbName + "?user=" + dbUserName + "&password=" + dbPassword + "&useUnicode=true&characterEncoding=UTF-8";

確保字符串中沒有空格。所有連接字符串都應(yīng)該連續(xù),沒有任何空格字符。

嘗試將“l(fā)ocalhost”替換為環(huán)回地址 127.0.0.1。 還嘗試將端口號添加到連接字符串中,例如:

String connectionString = "jdbc:mysql://localhost:3306/my_database?user=root&password=Pass&useUnicode=true&characterEncoding=UTF-8";

通常 MySQL 的默認(rèn)端口是 3306。

不要忘記將用戶名和密碼更改為您的 MySQL 服務(wù)器的用戶名和密碼。

  • 更新您的 JDK 驅(qū)動程序庫文件
  • 測試不同的 JDK 和 JRE(例如 JDK 6 和 7)
  • 不要更改 max_allowed_pa??cket

max_allowed_pa??cket”是MySQL 配置文件中的一個變量,指示最大數(shù)據(jù)包大小,而不是最大數(shù)據(jù)包數(shù)量。所以這對解決這個錯誤沒有幫助。

  • 更改 tomcat 安全性

將 TOMCAT6_SECURITY=yes 更改為 TOMCAT6_SECURITY=no

  • 使用validationQuery屬性

使用validationQuery="select now()"確保每個查詢都有響應(yīng)

  • 自動重新連接

將此代碼添加到您的連接字符串中:

&autoReconnect=true&failOverReadOnly=false&maxReconnects=10

雖然這些解決方案都不適合我,但我建議您嘗試一下。因為有些人按照這些步驟解決了他們的問題。

但是什么解決了我的問題呢?

我的問題是我在數(shù)據(jù)庫中有很多 SELECT。每次我創(chuàng)建連接然后關(guān)閉它。雖然我每次都關(guān)閉連接,但是系統(tǒng)面臨很多連接并給了我這個錯誤。 我所做的是將連接變量定義為整個類的公共(或私有)變量,并在構(gòu)造函數(shù)中初始化它。然后每次我使用該連接時。它解決了我的問題,也極大地提高了我的速度。

#結(jié)論# 沒有簡單且獨特的方法來解決這個問題。建議您結(jié)合自身情況考慮,選擇以上解決方案。如果您在程序開始時出現(xiàn)此錯誤并且根本無法連接到數(shù)據(jù)庫,則您的連接字符串可能有問題。但是,如果您在與數(shù)據(jù)庫進(jìn)行多次成功交互后出現(xiàn)此錯誤,則問題可能出在連接數(shù)上,您可能會考慮更改“wait_timeout”和其他 MySQL 設(shè)置,或者重寫代碼以減少連接數(shù)。

Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage