0

データソースオブジェクトを使用して、接続プールからOracleJDBC接続を取得しています。そして、接続を使用して、JavaからDBにいくつかのログを挿入します(Java静的メソッドを介して)。ユーザーごとに約10〜20の挿入があるので、私が行っているのは、フィルターで要求レベルで接続をコミットし、セッションレベルで接続を閉じています(セッションリスナーのsessionDestroyed()メソッドを介して)エラーは発生しませんでしたテストではありますが、実稼働環境では、次のようなエラーはほとんど発生しません。

java.sql.SQLException: execute, Exception = null (one scenario)
java.sql.SQLException: close, Exception = null (for another scenario)

これらのエラーを回避する方法は?リクエストレベルでコミットしてセッションレベルで閉じる代わりに、Java静的メソッドで接続をコミットして閉じることはできますか?

しかし、私を面白がらせているのは、Java静的メソッドに以下のロジックがあるにもかかわらず、これらのエラーが発生していることです。

if (con.isClosed() || con == null) {
 DBConnectionHelper connHelper = DBConnectionHelper.createInstance();
    con=connHelper.getConnection("ds");
    con.setAutoCommit(false);
}

だから私は上記をチェックしているので、実行しようとしているときに接続を閉じる方法はありませんよね?しかし、なぜそれが発生するのかわからず、混乱しています。

4

2 に答える 2

1

変化する

if (con.isClosed() || con == null) {  

if ( con == null || con.isClosed() ) {  

そして、違いがあるかどうかを確認します。

成功としてどのようにチェックcon=connHelper.getConnection("ds");しましたか?実行する前
に恐れconて いますその場合は、本番データベースの接続文字列が正しいかどうかを確認する必要があります。nullcon.setAutoCommit(false);

于 2012-05-15T13:28:43.967 に答える
1

あなたのconオブジェクトはnullだと思いますか?

次のブロックについて考えてみます。

if (con.isClosed() || con == null) {
 DBConnectionHelper connHelper = DBConnectionHelper.createInstance();
    con=connHelper.getConnection("ds");
    con.setAutoCommit(false);
}

まず、接続が閉じているかどうかを確認します。次に、そのnullかどうかを確認します。conが実際にnullの場合、NullpointerExceptionが発生します。

チェックを切り替えて、それが何か役立つかどうかを確認してください:-)

if (con == null || con.isClosed()) {
 DBConnectionHelper connHelper = DBConnectionHelper.createInstance();
    con=connHelper.getConnection("ds");
    con.setAutoCommit(false);
}
于 2012-05-15T13:28:13.717 に答える