过去我的数据库遇到了更多问题:它无法始终获得连接。数据库在网站(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'"
答案 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并尝试使用数据库池再次连接。