JDBC を使ったデータベースの処理は、以下のような流れで進んでいきます。
- Class.forName() を使って任意の JDBC ドライバを登録
- DriverManager を使って DB コネクションを確立(
Connectionオブジェクトを取得) - Connection オブジェクトを使って SQL statement を作成(
Statementオブジェクトを作成) - Statement オブジェクトを使ってクエリを実行し、実行結果を取得(
ResultSetオブジェクトを取得)
Connection, Statement, ResultSet は、処理が終わったら close() する必要があります。
各オブジェクトのオープンとクローズの関係を、分かりやすいようにインデントで対にして示すと以下のようになります。
// あらかじめ Class.forName(...) で JDBC ドライバを登録しておく
Connection connection = DriverManager.getConnection(...)
Statement statement = connection.createStatement()
ResultSet resultSet = statement.executeQuery(...)
resultSet を使った処理
resultSet.close()
statement.close()
connection.close()
上記の例では、SQL 文を実行するために Statement.executeQuery() を呼んでいますが、実行する SQL の種類によってメソッドが異なります。
- INSERT, DELETE, UPDATE 文を実行する場合
int Statement#executeUpdate(...)
- SELECT 文を実行する場合
ResultSet Statement#executeQuery(...)
☝️ Statement と ResultSet のオープン、クローズ関係
Statement がクローズされると、その Statement からオープンされた ResultSet も自動的にクローズされます(API 仕様)。
1 つの Statement から複数の ResultSet を同時にオープンすることはできません。
すでに ResultSet をオープンしている状態で、Statement の execution メソッドを呼び出すと、自動的にその ResultSet はクローズされ、新しい ResultSet が生成されます。