单一实例数据库连接出现问题



我正在使用单例设计模式进行数据库连接。

这是我的方法。

     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: 通信链路故障

任何人都可以展示实现此操作以避免此错误的正确方法是什么?

谢谢。

您正在重用相同的Connection对象...好吧,一切。您的单一实例应该是每次都返回新连接的ConnectionFactory

正如有人已经指出的那样,与其创建/关闭新连接,不如使用连接池。您不必自己编写 - 有现成的开源实现,例如 C3PO 或 DBCP。

更好的是,与其重新发明这个轮子,不如使用 DataSource .如果你可以使用 Spring,它有一个DriverManagerDataSource实现。否则,请随意查看它是如何编写的并编写自己的(当 Spring 不是一种"允许"的技术时,我至少做过一次(。

最后,如果你在Tomcat,JBoss或Glassfish等容器中运行,那么你可以简单地将DataSource绑定到JNDI并使用它。这使您的应用程序不必自己处理池和配置/部署问题(如数据库用户名和密码(。

你应该去连接池。

如果 mysql 服务器以某种方式断开您的连接,您的机制将不起作用。

最新更新