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 part3

オリジナルの RowProcessor 作成する

オリジナルの RowProcessor を作成方法は次の通りです。

たったこれだけです。

デフォルトで使用される BasicRowProcessor は Bean とテーブル列をマッピングするときに列名で比較します。
これを列名ではなく、ラベル名で比較するように変更したクラス LabelRowProcesser を作ってみました。

BasicRowProcessor のクラス名を変えて、ロジックを 2 行変更しただけです。
具体的には ResultSetMetaData から列名を取得している箇所をラベル名を取得するように呼び出しメソッドを変更しました。

getColumnName メソッド → getColumnLabel メソッド


オリジナルの RowProcessor を使う

オリジナルの RowProcessor を使った場合のコードは次のようになります。

import java.sql.Connection;
import java.sql.DriverManager;
import java.util.List;

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

/**
 * DBUtilsを使ったサンプル。
 * 独自のRowProcessorを使ってみる。
 */
public class Sample3 {

    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 BeanListHandler(Product.class, LabelRowProcessor.instance());
        QueryRunner runner = new QueryRunner();
        
        String sql = "SELECT ID NAME, NAME ID, PRICE FROM PRODUCT";
        List list = (List) runner.query(con, sql, h);
        
        for(int i=0; i<list.size(); i++){
            Product p = (Product) list.get(i);
            System.out.println("id:" + p.getId());
            System.out.println("name:" + p.getName());
            System.out.println("price:" + p.getPrice());
        }
        
        DbUtils.closeQuietly(con);
    }
}

デフォルトの BasicRowProcessor を使うときとの違いは1つだけです。
それは、

ということです。

    ResultSetHandler h = new BeanListHandler(Product.class, LabelRowProcessor.instance());

標準で用意されている Handler には RowProcessor を引数にとるコンストラクタがあるのでそれを使って使用する RowProcessor を指定します。



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

◎参考

Java殴り書き
「Jakarta Commons DBUtils part1」 ・・・BeanHandler を使ったサンプルの説明をしています。
「Jakarta Commons DBUtils part2」 ・・・BeanListHandler を使ったサンプルの説明をしています。

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