5

こんにちは、私はそれが古い質問であることを知っていましたが、今日はただ興味があります。私たちが知っているように、connection.closeはpreparedStatementも閉じます(間違っている場合は修正してください)。しかし、接続を閉じてからpreparedStatementを閉じるとどうなりますか

conn.close();
ps.close();

nullpointer例外が発生しますか?

誰かがあなたのjvmの速度に依存すると言っていました。時にはps.close()が先に実行され、conn.closeが彼の仕事を終える前に最初に閉じて、nullpointerを取得しないことがあります。

それをテストするために、私はコードを変更しました

conn.close();
Thread.sleep(5000);//I give 5s to conn.close to finish his work. should be enough
ps.close();

しかし、nullpointerを取得できませんでした。

だから私の質問は、私が最初にconnを閉じ、次にpsを閉じた場合にここで何が起こったのかということです。

皆さんありがとう。

4

2 に答える 2

5

状態のJavaDoc Statement.close()

すでに閉じられてcloseいるオブジェクトに対してメソッドを呼び出しても効果はありません。Statement

の呼び出しによってステートメントがすでに閉じられている場合、実装は例外をスローしないはずであることを意味しますConnection.close()

于 2012-09-04T07:15:40.230 に答える
1

ステートメントインターフェイスのjavadocによる

close
void close()
           throws SQLExceptionReleases this Statement object's database and JDBC resources immediately instead of waiting for this to happen when it is automatically closed. It is generally good practice to release resources as soon as you are finished with them to avoid tying up database resources. 
**Calling the method close on a Statement object that is already closed has no effect.** 

したがって、すでに閉じられているステートメントを閉じても問題はありません。

于 2012-09-04T07:16:57.643 に答える