CallableStatement
のインスタンスを再利用することは、一般的に良い方法と考えられています (ここを確認してください)。
しかし、 を作成するときCallableStatement
、そのステートメントは (私の理解では) 特定の にバインドされConnection
ます。したがって、通常は次のようにします。
Connection con = pool.getConnection();
CallableStatement st = con.prepareCall("{ some stmt; }");
st.executeQuery();
st.close();
con.close();
私が確認したところ、次のクエリは実行されません。
Connection con = pool.getConnection();
CallableStatement st = con.prepareCall("{ some stmt; }");
con.close();
con = pool.getConnection(); // possibly another new connection, different than the one used to create the CallableStatement instance
st.executeQuery();
st.close();
私の質問は、すべてのCallableStatement
インスタンスを再利用したいが、一方で新しい接続を取得して古い接続を閉じることができる場合 (常に同じ接続を開いているとは限らない)、どうすればよいですか?