无法连接到MySql数据库

时间:2013-11-15 16:45:49

标签: java mysql jdbc

过去我的数据库遇到了更多问题:它无法始终获得连接。数据库在网站(webhosting)上运行,我尝试从我自己的PC访问它。这里出了问题,如果我从localhost访问localhost然后就可以了。

我在Java中遇到错误: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'"

1 个答案:

答案 0 :(得分:2)

主要问题是您打开了太多连接,可能永远不会关闭它们,或者应用程序服务器(或运行此应用程序的任何位置)关闭它们。您可以从帖子中的两个事实中了解这一点:

  • private static Connection cachedConnection。数据库连接不得手动缓存,而应在需要时检索 ,并在使用后关闭
  • com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException: No operations allowed after connection closed.此错误非常明确,您尝试使用已关闭的连接。

此外,您手动打开连接,请注意:

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

要解决所有这些问题,您应该转到database connection pool。简而言之,连接池将打开一堆物理数据库连接,并使它们处于休眠状态,并按需唤醒连接,然后在关闭连接时,而不是关闭物理连接,它将返回到睡眠状态,从而节省了打开新连接的时间。

更多信息:


关于上次编辑,似乎需要关闭与数据库的某些连接。您应该kill some of them并尝试使用数据库池再次连接。