CodeZine(コードジン)

特集ページ一覧

DBの値を自動でJavaオブジェクトに変換するライブラリ「DBUtils」のご紹介

目指せ、定時退社! スマートなエンジニアのためのお役立ちツール(2)

  • LINEで送る
  • このエントリーをはてなブックマークに追加
2014/02/05 14:00
目次

データベースの値を取得しよう

 DbUtilsを使ったデータベースへのアクセスは、次のようなプログラムになります。

データベースへの接続/参照を行う例(SelectBook.javaの抜粋)
// 1. DataSourceを取得
Context context = new InitialContext();
DataSource ds = (DataSource)context.lookup("java:/comp/env/jdbc/mysql");

// 2. QueryRunnerオブジェクトを生成
QueryRunner runner = new QueryRunner(ds);

// 3. ResultSetHandlerを実装したクラスのオブジェクトを生成
ResultSetHandler<List<Object[]>> rs = new ArrayListHandler();

// 4. queryメソッドを実行
List<Object[]> book = runner.query("select id,name,price from book", rs);

 簡単にプログラムの説明をします。

1. DataSourceを取得

 DataSourceまたはConnectionオブジェクトを取得します。

2.QueryRunnerオブジェクトを生成

 DBUtilsのQueryRunnerオブジェクトを生成します。

3.ResultSetHandlerを実装したクラスのオブジェクトを生成

 結果を格納するためのオブジェクトを生成します。このとき格納するオブジェクトは使用するResultSetHandlerによって異なります。

4.QueryRunnerのqueryメソッドを実行してデータベースの値を取得

 QueryRunnerのqueryメソッドは、第1引数にSQL文、第2引数にSQL文の実行結果を格納するためのオブジェクトを引数として渡します。このqueryメソッドは内部でConnectionの確立やSQL文の実行、ResultSetやConnectionのclose処理を行います。

 そのため、これらの動作をプログラマ自身が書く必要がありません。そのため、コードが簡潔になっています。また、closeし忘れの心配もありません。

 取得した値はListに格納されたObject配列に格納されます。JSPで表示するときは次のようになります。

データベースの参照結果を表示(resultSelect.jspの抜粋)
<h3>ArrayListHandler</h3>
<table>
    <thead>
        <tr><th>id</th><th>name</th><th>price</th></tr>
    </thead>
    <tbody>
        <c:forEach var="book" items="${book4}">
            <tr>
                <td>${book[0]}</td>
                <td>${book[1]}</td>
                <td>${book[2]}</td>
            </tr>
        </c:forEach>
    </tbody>
</table>

 データベースから取得した値をテーブルで表示した例です。

値の取得結果
値の取得結果

 DBUtilsで提供されている主なResultSetHandlerには、以下のものがあります。

ResultSetHandlerのデータ形式
クラス名 戻り値 データ形式
ScalarHandler 列の型 指定した列のデータを1件取得
ColumnListHandler List<Object> 指定した列の全データをObjectのList
ArrayHandler Object[] 配列
ArrayListHandler List<Object[]> 配列のList
MapHandler Map<String,Object> 列名をキーとするMap
MapListHandler Map<String,Object> 列名をキーとするMapのList
BeanHandler JavaBeans 指定したJavaBeans
BeanListHandler List<JavaBeans> 指定したJavaBeansのList

 では、ResultSetHandlerでの具体的なデータの取得方法をご紹介します。

検索結果を1つの値として取得する

 データベース上の指定した列から1つの値だけを取得したいときは、ScalarHandlerを使用します。このScalarHandlerは、取得した値をJavaのObjectに変換して格納します。

 変換されるObjectは、データベースの列のデータ型に応じたJavaのデータ型になります。ScalarHandlerの引数に取得したい列の名前を指定します。また、引数に列のインデックスを指定することもできます。なお、SQLの実行結果が複数ある場合でも、先頭の値のみ取得されます。

値の取得イメージ
値の取得イメージ
指定した列のデータを1件だけ取得する(SelectBook.javaの抜粋)
public String getScalar() throws  SQLException {

    ResultSetHandler<Object> rs = new ScalarHandler("name");
    String book = (String)runner.query( "select name from book where id =\"b001\"" , rs);

    return book;
}

  • LINEで送る
  • このエントリーをはてなブックマークに追加

バックナンバー

連載:目指せ、定時退社! スマートなエンジニアのためのお役立ちツール

著者プロフィール

  • WINGSプロジェクト 阿佐 志保(アサ シホ)

    <WINGSプロジェクトについて> 有限会社 WINGSプロジェクトが運営する、テクニカル執筆コミュニティ(代表 山田祥寛)。主にWeb開発分野の書籍/記事執筆、翻訳、講演等を幅広く手がける。2018年11月時点での登録メンバは55名で、現在も執筆メンバを募集中。興味のある方は、どしどし応募頂...

  • 山田 祥寛(ヤマダ ヨシヒロ)

    静岡県榛原町生まれ。一橋大学経済学部卒業後、NECにてシステム企画業務に携わるが、2003年4月に念願かなってフリーライターに転身。Microsoft MVP for ASP/ASP.NET。執筆コミュニティ「WINGSプロジェクト」代表。 主な著書に「入門シリーズ(サーバサイドAjax/XM...

あなたにオススメ

All contents copyright © 2005-2022 Shoeisha Co., Ltd. All rights reserved. ver.1.5