query()内部で行われていること

  1. コンストラクタで渡されたDataSourceオブジェクトからConnectionを取得。
  2. 渡されたSELECT文からPreparedStatementオブジェクトを作成。
  3. SELECT文中のプレースホルダに渡されたパラメタをセット。
  4. PreparedStatementオブジェクト(SELECT文)を実行。
  5. 取得結果のResultSetをObject[]に変換する。
    • これは渡されたResultSetHandlerオブジェクトのhandle()を呼び出すことで行われる。このサンプルコードでは、ArrayHandlerオブジェクトを渡しているので、そのhandle()が呼ばれる。
    • さらにこの(ArrayHandler.handle())メソッドは、ArrayHandlerをデフォルトコンストラクタで生成した場合、BasicRowProcessorのtoArray()メソッドを呼び出す。ここで実際にResultSet→Object[]が行われる。
  6. PreparedStatement, ResultSetをcloseする。
  7. Connectionをcloseする。
  8. Object[]を返す。

QueryRunner.query()には、(引数の違いにより)6つのバリエーションがあるが、大体上のような感じ。

該当レコードがない場合、query()はnullを返す。このとき例外(java.sql.SQLException)は発生しない。