SHOEISHA iD

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

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

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

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

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

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

JavaBeansとして取得する

 DBから取得した値を、そのままJavaBeansに格納して利用することができればとても便利です。そんなときは、BeanHandlerを使用します。このBeanHandlerは、取得した値の列名に対応するJavaBeansのプロパティに自動的にセットして格納します。なお、データベースの列名とJavaBeansのプロパティ名は一致させておく必要がありますので、注意が必要です。

 このBeanHandlerを使用するときは、あらかじめ結果に対応するJavaBeansのクラスを作成する必要があります。そして、作成したクラスをBeanHandlerの引数に指定します。

JavaBeansの作成(BookBean.javaの抜粋)
public class BookBean {

    private String id;
    private String name;
    private int price;

    public String getId() { return id; }
    public void setId(String id) { this.id = id; }

    public String getName() { return name; }
    public void setName(String name) { this.name = name; }

    public int getPrice() { return price; }
    public void setPrice(int price) { this.price = price; }

}
値の取得イメージ
値の取得イメージ
JavaBeansとして取得する(SelectBook.javaの抜粋)
public BookBean getBean() throws  SQLException {

    ResultSetHandler<BookBean> rs = new BeanHandler<BookBean>(BookBean.class);
    BookBean book = runner.query( "select id,name,price from book where id=\"b001\"", rs);

    return book;
}

 ある条件にマッチするデータの検索結果が複数レコードある場合はどうすればよいでしょうか? そのときは、BeanHandlerではなく、BeanListHandlerを使用します。

値の取得イメージ
値の取得イメージ
JavaBeansを複数取得する(SelectBook.javaの抜粋)
public List<BookBean> getBeanList() throws SQLException {

    ResultSetHandler<List<BookBean>> rs = new BeanListHandler<BookBean>(BookBean.class);
     List<BookBean> book = runner.query( "select id,name,price from book", rs);

    return book;
}

データベースの値を更新しよう

 DBUtilsでは、レコードの参照だけでなく、レコードの挿入/更新/削除も行うことができます。挿入/更新/削除はQueryRunnerのqueryメソッドではなく、updateメソッドを使用します。

レコードを挿入/更新/削除する

 レコードを挿入/更新/削除するときは、次のようにQueryRunnerのupdateメソッドにSQL(INSERT文/UPDATE文/DELETE文)を引数として渡します。

データの挿入/更新/削除(UpdateBook.javaの抜粋)
public void update() throws SQLException {

    // データ挿入
    runner.update("INSERT INTO BOOK VALUES (\"b004\",\"よく分かるSDN\",1500)");

    // データ更新
    runner.update("UPDATE BOOK SET PRICE=2000 WHERE ID =?","b002");

    // データ削除
    runner.update("DELETE FROM BOOK WHERE ID=?","b003");
}

 なお、updateメソッドで第2引数に指定した値を、SQL文に渡すことができます。

複数のレコードをまとめて挿入/更新/削除する

 データを挿入/更新するときは、1件ずつではなく複数まとめて処理したいことがあります。そのときは、次のようにQueryRunnerのbatchメソッドを使います。このbatchメソッドはSQLを引数として渡し、第2引数に繰り返したいデータを渡します。例えば、次のサンプルコードの場合、以下のデータをListにまとめて、insert文でデータベースにレコードを挿入しています。

挿入するデータ
id name price
b010 Scara入門 2500
b020 わくわくRuby 3500
複数レコードの挿入(UpdateBook.javaの抜粋)
public void insertBatch() throws SQLException {

    // データ一括挿入
    List<Object[]> params = new ArrayList<Object[]>();
    params.add(new Object[]{ "b010" , "Scala入門 第2版", 2500});
    params.add(new Object[]{ "b020" , "わくわくRuby" ,  3500});
    runner.batch("INSERT INTO BOOK VALUES ( ? , ? , ?)", params.toArray(new Object[0][]));
}

 これにより、2件のレコードがbookテーブルに追加されました。

おわりに

 RDBMSへの接続ライブラリである「DBUtils」を使用すると、次のことが効率よく行えます。

  • データベースの検索結果をJavaのオブジェクトに自動的にマッピング
  • データベース接続のためのコードの簡素化

 データベースの接続があるコードは煩雑になりがちですが、これらのコード量が減るのでプログラマが楽になるだけでなく、プログラムの可読性が上がります。また、データベースの値を参照するときの単純なコードミスや、コネクションの切断し忘れなどのうっかりミスを減らすことができます。

 短期間で品質の高いシステムを効率よく開発するために、「DBUtils」を使ってみてはいかがでしょうか?

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

  • 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」など、さまざまなカンファレンスを企画・運営しています。

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

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

メールバックナンバー

アクセスランキング

アクセスランキング