SQL文をデータベースに発行する時には必ず、Statementのインスタンスが必要です。Statementのインスタンスがあれば、Statementのメソッドを使って問い合わせを発行できます。このメソッドは、結果全体を保持するResultSetのインスタンスを返します。Example 8-1は、このプロセスを示します。
Example 8-1. JDCBで簡単な問い合わせを処理
この例は、簡単な問い合わせで、各行の最初のカラムを表示します。
Statement st = db.createStatement(); ResultSet rs = st.executeQuery("SELECT * FROM mytable"); while(rs.next()) { System.out.print("Column 1 returned "); System.out.println(rs.getString(1)); } rs.close(); st.close();
Statementインタフェースを使用する際は、以下を考慮しなければなりません:
必要な時には何回でも1つのStatementのインスタンスを使用できます。接続を開いたらすぐにこのインスタンスを作成でき、この接続が有効な期間内で使用することができます。しかし、1つのStatementには1つのResultSetしかあり得ないことを覚えておかなければなりません。
ResultSetの処理中に問い合わせを実行する必要があれば、単純に別のStatementを作成して、それを使用して下さい。
スレッドを使用し、複数スレッドがデータベースを使用する場合、各スレッドにStatementインスタンスを分けて使わなければなりません。スレッドの使用を考えているのなら、Section 8.7を参照してください。そこにはいくつか重要な点が記載されています。
ResultSetインタフェースを使用する際、以下のことを考慮しなければなりません:
値を読む前に必ず、next()を呼び出して下さい。結果があれば真を返します。しかし重要なことは、これにより処理のための行が準備されるということです。
JDBCの仕様では、一度しかフィールドにアクセスできません。この規則を厳守することは最も安全なのですが、現時点でのPostgresのドライバでは、必要ならば何回でもフィールドにアクセスすることができます。
ResultSetに対する処理が完了した時にはclose()を呼び出してResultSetを閉じなければなりません。
ResultSetを作成する時に使用していたStatementに別の問い合わせを作ると、その時点で開いていたResultSetインスタンスは自動的に閉ざされます。