3

过了一会儿我得到了这个错误,那么在给我的单例之前如何确保连接没有死?

这是我的代码:

public static Connection getInstance() throws Exception {

    if(connection != null) {
        return connection;
    }

        DriverManager.registerDriver(new AppEngineDriver());
        connection = DriverManager.getConnection("jdbc:google:rdbms://"+instanceName+"/vidaao");

    return connection;

}

堆栈跟踪:

java.sql.SQLException:此连接已关闭。在 com.google.cloud.sql.jdbc.internal.Exceptions.newConnectionClosedException(Exceptions.java:52) 在 com.google.cloud.sql.jdbc.Connection.throwIfNotOpen(Connection.java:633) 在 com.google.cloud .sql.jdbc.Connection.getHoldability(Connection.java:194) 在 com.google.cloud.sql.jdbc.Connection.createStatement(Connection.java:123) 在 com.google.cloud.sql.jdbc.Connection.createStatement (Connection.java:54) at db.DbUser.exist(DbUser.java:209) at controller.CtrlUser.login(CtrlUser.java:343) at vidaao.ConnectServlet.doPost(ConnectServlet.java:36) at javax.servlet .http.HttpServlet.service(HttpServlet.java:637) at javax.servlet.http.HttpServlet.service(HttpServlet.java:717) at org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.java:511) at组织。

我尝试使用 isClosed() 但不起作用,并且 isValid() 看起来可以正常工作,但每次都会减慢与数据库的连接

4

1 回答 1

2

调用Connection#isValid将是最好的方法,但是是的,它会 ping 数据库以确保连接有效。

我注意到您没有在 AppEngine 中使用标准的 mysql 连接器/j 驱动程序,我建议您尝试一下。它不会像旧驱动程序那样使服务器上的连接超时。

有关要在 AppEngine 中使用的 JDBC 驱动程序类的类名以及要使用的 URL,请参阅https://developers.google.com/appengine/docs/java/cloud-sql/#Java_Connect_to_your_database 。

希望这会有所帮助,罗布

于 2013-12-12T16:20:24.427 回答