簡體   English   中英

無法連接到MySql數據庫

[英]Not being able to connect to MySql database

我過去在數據庫方面遇到了更多問題:它無法始終獲得連接。 數據庫在網站(webhosting)上運行,我嘗試從我自己的PC訪問它。 這里出了問題,如果我從localhost訪問localhost然后它可以正常工作。

我在Java中com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException: No operations allowed after connection closed.錯誤: com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException: No operations allowed after connection closed.

我不知道為什么,我使用類似的結構,如下所示:

public class SQL {
    private final static String USERNAME = "";
    private final static String PASSWORD = "";
    private final static String URL = "jdbc:mysql://www.fvheeswijk.nl:3306/p28004_bf4";

    private static Connection cachedConnection;

    private static void createConnection() {
        cachedConnection = null;
        Properties connectionProperties = new Properties();
        connectionProperties.put("user", USERNAME);
        connectionProperties.put("password", PASSWORD);
        try {
            cachedConnection = (Connection) DriverManager.getConnection(URL, connectionProperties);
        } catch (SQLException ex) {
            Logger.getLogger(SQL.class.getName()).log(Level.SEVERE, null, ex);
        }
    }

    public static Connection getConnection() {
        if (cachedConnection == null) {
            createConnection();
        }
        return cachedConnection;
    }
}

數據當然是空白的。

然后我試着ping我的網站,一切都很好。

后來我試圖ping數據庫www.fvheeswijk.nl:3306 ,但Windows cmd無法找到它。 然后我嘗試通過瀏覽器訪問它(這甚至有意義嗎?),但我得到了一些消息“無序接收的數據包”。 我已經(以前的方式)將我的PC(路由器/網絡)主機名添加到數據庫的允許主機列表中。

有任何線索或建議出了什么問題?

編輯:現在我得到這個,可能會解釋一下...... java.sql.SQLException: null, message from server: "Host '541DB0AA.cm-5-6c.dynamic.ziggo.nl' is blocked because of many connection errors; unblock with 'mysqladmin flush-hosts'"

主要問題是您打開了太多連接,可能永遠不會關閉它們,或者它們被應用程序服務器(或運行此應用程序的任何位置)關閉。 這可以從你帖子中的兩個事實中得知:

  • private static Connection cachedConnection 數據庫連接不能手動緩存,而應在需要時檢索,並在使用后關閉
  • com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException: No operations allowed after connection closed. 此錯誤非常明確,您嘗試使用已關閉的連接。

此外,您手動打開連接,這里注意到:

cachedConnection = (Connection) DriverManager.getConnection(URL, connectionProperties);

要解決所有這些問題,您應該轉到數據庫連接池 簡而言之,連接池將打開一堆物理數據庫連接,並使它們處於休眠狀態,並按需喚醒連接,然后在關閉連接時,而不是關閉物理連接,它將返回到睡眠狀態,從而節省了打開新連接的時間。

更多信息:


關於上次編輯,似乎需要關閉一些與數據庫的連接。 您應該殺死其中一些並嘗試使用數據庫池再次連接。

暫無
暫無

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

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