Deprecated: The each() function is deprecated. This message will be suppressed on further calls in /home/zhenxiangba/zhenxiangba.com/public_html/phproxy-improved-master/index.php on line 456
Javaでも。
[go: Go Back, main page]

■Jakarta Commons DBUtils part1

Commons DBUtils とは

DBUtils について簡単に説明すると、「JDBC を使いやすくするためのもの」です。
そういう目的で作られているので、それほど高度な機能を持っているわけではありません。 が、逆に機能が限られている分比較的扱いやすくなっています。

用意されている主な機能は次の通りです。

QueryRunner と BeanHandler

DBUtils で最も重要なクラスが QueryRunner クラスです。
QueryRunner は名前から想像できるまんまで SQL 文を実行します。
このとき、ResultSetHandler の実装クラスを指定して実行結果を色々な形式で扱うことができます。

今回は QueryRunner と ResultSetHandler の実装クラスの一つである BeanHandler を使ってサンプルを書いてみます。
BeanHanlder を使うと SQL 文の実行結果を Bean に詰めた形で受け取ることが出来ます。

public class Product {
    private String id;
    private String name;
    private int price;
    
    public String getId() {
        return id;
    }

    public String getName() {
        return name;
    }

    public int getPrice() {
        return price;
    }

    public void setId(String string) {
        id = string;
    }

    public void setName(String string) {
        name = string;
    }

    public void setPrice(int i) {
        price = i;
    }

}

まずは SQL の実行結果を格納するクラスです。 単純に getter, setter があれば良いです。
唯一の注意点は Bean のプロパティ名を SQL の結果として帰ってくるテーブルの各列名と同じにすることです。
大文字、小文字は区別されません。

ではいよいよ本題の部分です。

import java.sql.Connection;
import java.sql.DriverManager;

import org.apache.commons.dbutils.DbUtils;
import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.ResultSetHandler;
import org.apache.commons.dbutils.handlers.BeanHandler;

/**
 * DBUtilsを使ったサンプル。
 * BeanHandlerを使ってみる。
 */
public class Sample1 {

    public static void main(String[] args) throws Exception{
        
        Class.forName("org.hsqldb.jdbcDriver");
        Connection con = DriverManager.getConnection("jdbc:hsqldb:hsql://localhost","sa","");
        
        ResultSetHandler h = new BeanHandler(Product.class);
        QueryRunner runner = new QueryRunner();
        
        String sql = "SELECT ID, NAME, PRICE FROM PRODUCT";
        Product p = (Product) runner.query(con, sql, h);
        
        System.out.println("id:" + p.getId());
        System.out.println("name:" + p.getName());
        System.out.println("price:" + p.getPrice());
        
        DbUtils.closeQuietly(con);
    }
}

上のコードでポイントとなるところは次の2点です。

1. BeanHandler の生成

    ResultSetHandler h = new BeanHandler(Product.class);
ポイントはこの部分です。生成の時に結果を格納することになるクラスを渡します。


2. QuerryRunner の実行

QuerryRunner で SQL の発行を行うには query メソッドを使います。
今回は Connection と SQL 文の String、そして BeanHander のインスタンスを query メソッドに渡して実行しています。

    QueryRunner runner = new QueryRunner();
    
    String sql = "SELECT ID, NAME, PRICE FROM PRODUCT";
    Product p = (Product) runner.query(con, sql, h);
結果は Product クラスのオブジェクトとして返ってくるのでキャストして受け取っています。
つまり、ResultSet からデータを取り出して Product クラスに格納する部分を DBUtils がやってくれているというわけです。


今回の使ったのは:
Jakarta Commons DBUtils API 1.0

◎参考
The Apache Jakarta Project ・・・本家。バイナリ、ソースコードやその他の情報が手に入ります。
The Ja-Jakarta Project ・・・API Document の日本語訳が手に入ります。