query()内部で行われていること
- コンストラクタで渡されたDataSourceオブジェクトからConnectionを取得。
- 渡されたSELECT文からPreparedStatementオブジェクトを作成。
- SELECT文中のプレースホルダに渡されたパラメタをセット。
- PreparedStatementオブジェクト(SELECT文)を実行。
- 取得結果のResultSetをObject[]に変換する。
- これは渡されたResultSetHandlerオブジェクトのhandle()を呼び出すことで行われる。このサンプルコードでは、ArrayHandlerオブジェクトを渡しているので、そのhandle()が呼ばれる。
- さらにこの(ArrayHandler.handle())メソッドは、ArrayHandlerをデフォルトコンストラクタで生成した場合、BasicRowProcessorのtoArray()メソッドを呼び出す。ここで実際にResultSet→Object[]が行われる。
- PreparedStatement, ResultSetをcloseする。
- Connectionをcloseする。
- Object[]を返す。
QueryRunner.query()には、(引数の違いにより)6つのバリエーションがあるが、大体上のような感じ。
該当レコードがない場合、query()はnullを返す。このとき例外(java.sql.SQLException)は発生しない。