queryArray()、queryIterator()、および queryList() メソッドの多重定義のパターンはほとんど同じであるため、以下に示す例は queryIterator() メソッドのみを基にしています。 ただし、queryArray() および queryList() メソッドとは異なり、queryIterator() メソッドは、同時に 1 行フェッチし、照会結果をマテリアライズしません。 Array および List オブジェクトは、すべての結果行を保持しますが、Iterator オブジェクトは同時に 1 行しか保持しません。
CREATE TABLE company.Customer(
CUSTID INTEGER NOT NULL,
NAME VARCHAR(75),
ADDRESSL1 VARCHAR(60),
CITY VARCHAR(35),
REGION INTEGER,
PRIMARY KEY(CUSTID))
Connection con = DriverManager.getConnection(...);
Data db = DataFactory.getData(con);
Iterator<Map<String, Object>> regionSize =
db.queryIterator(
"SELECT REGION, COUNT(*) AS CUSTOMER_COUNT " +
" FROM company.Customer GROUP BY REGION " +
" ORDER BY CUSTOMER_COUNT DESC" );
public Customer {
public Integer custId;
public String name;
public String addressL1;
public String city;
@Column(name="REGION")
public Integer storeRegion
}
Connection con = DriverManager.getConnection(...);
Data db = DataFactory.getData(con);
Integer regionOne = ...;
Integer regionTwo = ...;
Iterator<com.company.Customer> twoRegions = db.queryIterator(
"SELECT CUSTID, NAME, ADDRESSL1, CITY, REGION" +
" FROM company.Customer WHERE REGION IN (?, ?)"
com.company.Customer.class, regionOne, regionTwo );
そのハッシュ・マップおよび Customer 表のすべての列を使用する RowHandler (以下の例には示されない) を作成して、顧客用の com.company.CustomerAddress Bean のインスタンスを作成することができます。
public CustomerAddress {
public Integer custId;
public String name;
public String addressL1;
public String city;
public String state;
public Integer zipCode;
}
RowHandler であるクラス com.company.Utils.HandleAddress は、RowHandler を実装します。RowHandler を使用して Bean のインスタンスを作成するには、以下のようなコードを書くことができます。
Connection con = DriverManager.getConnection(...);
Data db = DataFactory.getData(con);
Integer regionOne = ...;
Integer regionTwo = ...;
RowHandler<com.company.CustomerAddress> addAddress =
new com.company.Utils.HandleAddress();
Iterator<com.company.CustomerAddress> twoRegions =
db.queryIterator(
"SELECT CUSTID, NAME, ADDRESSL1, CITY, REGION" +
" FROM company.Customer WHERE REGION IN (?, ?)"
addAddress, regionOne, regionTwo );
同じ結果を生成する方法はほかにも数多くあります。 例えば、CITY および REGION を STATE および ZIP にマップするデータ・ソース上の表が存在する場合があります。この場合、company.Customer 表とそのマッピング表の結合として照会を書くことができます。
この例は、データがデータ・ソースから抽出された時点で、RowHandlers がアプリケーション・ロジックを提供できることを単に示しています。これにより、RowHandlers は、必要なクラスのオブジェクトの生成に必要なすべての情報がデータ・ソース上で使用できない場合でも、それらのオブジェクトを生成することができます。