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) で db.DbUser.exist(DbUser.java:209) で controller.CtrlUser.login(CtrlUser.java:343) で vidaao.ConnectServlet.doPost(ConnectServlet.java:36) で 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 connector/j ドライバーを使用していないことに気付きました。試してみることをお勧めします。古いドライバーのように、サーバー上の接続がタイムアウトすることはありません。

AppEngine 内で使用する JDBC ドライバー クラスのクラス名と使用する URL については、https: //developers.google.com/appengine/docs/java/cloud-sql/#Java_Connect_to_your_database を参照してください。

これが役に立てば幸いです、ロブ

于 2013-12-12T16:20:24.427 に答える