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 は、必要なクラスのオブジェクトの生成に必要なすべての情報がデータ・ソース上で使用できない場合でも、それらのオブジェクトを生成することができます。