单例数据库连接问题

时间:2011-08-10 08:44:33

标签: java jdbc

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

这是我的方法。

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

有人能说明实现这个的正确方法是什么来避免这个错误?

谢谢你。

2 个答案:

答案 0 :(得分:2)

你应该去connection-pooling.

如果mysql服务器丢失你的连接,你的机制将无法工作。

答案 1 :(得分:1)

你正在重复使用相同的Connection对象......好吧,一切。您的单身人士应该是ConnectionFactory,每次都会返回一个新连接。

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

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

最后,如果您在Tomcat,JBoss或Glassfish等容器中运行,那么您只需将DataSource绑定到JNDI并使用它即可。这使您的应用程序免于处理池和配置/部署问题(如数据库用户名和密码)本身。