我正在使用单例设计模式进行数据库连接。
这是我的方法。
private static Connection con=null;
public static Connection getConnection(){
try {
if(con==null){
Class.forName("com.mysql.jdbc.Driver").newInstance();
con = DriverManager.getConnection("jdbc:mysql://localhost/mydb", "root", "");
}else if(con.isClosed()){
Class.forName("com.mysql.jdbc.Driver").newInstance();
con = DriverManager.getConnection("jdbc:mysql://localhost/mydb", "root", "");
}
} catch (Exception ex) {
}
return con;
}
每当我重新启动mysql服务时,它都会生成以下错误,并且还必须重新启动应用程序才能再次运行。
错误:
com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: 通信链路故障
有人能说明实现这个的正确方法是什么来避免这个错误?
谢谢你。答案 0 :(得分:2)
如果mysql服务器丢失你的连接,你的机制将无法工作。
答案 1 :(得分:1)
你正在重复使用相同的Connection
对象......好吧,一切。您的单身人士应该是ConnectionFactory
,每次都会返回一个新连接。
正如有人已经指出的那样,使用连接池而不是创建/关闭新连接。您不必自己编写 - 有很多可用的开源实现,如C3PO或DBCP。
更好的是,不要再重新发明这个轮子,而是使用DataSource
。如果你可以使用Spring,它只有DriverManagerDataSource
实现。否则,请随意查看它是如何编写的并编写自己的(当Spring不是'允许'技术时,我至少做过一次)。
最后,如果您在Tomcat,JBoss或Glassfish等容器中运行,那么您只需将DataSource
绑定到JNDI并使用它即可。这使您的应用程序免于处理池和配置/部署问题(如数据库用户名和密码)本身。