SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

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

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

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

  • X ポスト
  • このエントリーをはてなブックマークに追加

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

 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;
}

次のページ
検索結果の列を取得する

この記事は参考になりましたか?

  • X ポスト
  • このエントリーをはてなブックマークに追加
目指せ、定時退社! スマートなエンジニアのためのお役立ちツール連載記事一覧

もっと読む

この記事の著者

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

静岡県榛原町生まれ。一橋大学経済学部卒業後、NECにてシステム企画業務に携わるが、2003年4月に念願かなってフリーライターに転身。Microsoft MVP for Visual Studio and Development Technologies。執筆コミュニティ「WINGSプロジェクト」代表。主な著書に「独習シリーズ(Java・C#・Python・PHP・Ruby・JSP&サーブレットなど)」「速習シリーズ(ASP.NET Core・Vue.js・React・TypeScript・ECMAScript、Laravelなど)」「改訂3版JavaScript本格入門」「これからはじめるReact実践入門」「はじめてのAndroidアプリ開発 Kotlin編 」他、著書多数

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

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

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

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

  • X ポスト
  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/7584 2014/02/05 14:00

おすすめ

アクセスランキング

アクセスランキング

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング