データベースを照会するインライン・メソッドの戻りの型: 照会結果の最初の行

Data インターフェースの多重定義された queryFirst() メソッドを使用して、照会結果の最初の行のみを戻すことができます。
このメソッドを使用する状態は以下のとおりです。

1 つの行のみが戻されると判断した場合、pureQuery は、FETCH FIRST ROW ONLY 節を追加するか、あるいは SELECT ステートメントを SELECT-INTO ステートメントに変更することによって、照会を最適化することがあります。

異なる形式の queryFirst() メソッド

Data インターフェースは、3 つの形式の queryFirst() メソッドを提供します。

java.util.Map <java.lang.String, java.lang.Object> queryFirst(java.lang.String sql, java.lang.Object... parameters)
この形式の queryFirst() メソッドは、タイプ java.util.Map<String,Object> の結果を戻します。 String は、指定された照会における列の小文字名または式です。 関連した Object のクラスは、列または式のデータ・タイプによって異なります。 これは、列または式のデータ・タイプのインスタンスを保管するためのナチュラル・クラスとして、JDBC によって定義されるクラスのインスタンスです。
例えば、1 つの部門 (WORKDEPT) に 4 人以上の従業員がいる場合、その部門の学校教育の平均年数 (EDLEVEL) を知りたいとします。

以下のコードは、キー average_edlevel および workdept を持つ 1 つの Map を生成します。 コードは、REPORTDEPT の値を渡して関心のある部門を識別します。

Connection con = DriverManager.getConnection(...); 
Data db = DataFactory.getData(con); 
String reportDept = "B01"; 
Map<String, Object> edLevelReport = db.queryFirst(  "SELECT AVG(EDLEVEL) AS AVERAGE_EDLEVEL, WORKDEPT" +  
" FROM SAMPLE_SCHEMA.EMP WHERE WORKDEPT = ?" +  " GROUP BY WORKDEPT HAVING COUNT(*) > 3", reportDept );

Map の代わりに、他の 2 つの形式の queryFirst() メソッドのいずれかを使用することもできます。それぞれのメソッドは既存のクラスのインスタンスを戻します。

例えば、com.company.Employee クラスの情報を戻すことで十分な場合があります。この Bean には、関心のある 2 つの情報の項目を保管することができるプロパティーが含まれています。 ただし、Bean のすべてのプロパティーの値を提供する予定がない場合、Employee Bean にデータをキャプチャーするのは望ましいことではありません。

代わりに、必要な情報のみを保管できる新規の Java オブジェクトを、通常はプライベート・クラスとして定義することができます。 これは、自己文書化されたクリア・コードを提供するため、さまざまな状況で最良のソリューションとなる可能性があります。 ただし、このソリューションでは、例えばその内容をスプレッドシートに入力するか、あるいはその内容を XML 文書を送信することによって、追加のアプリケーション・ロジックでこの新規クラスのインスタンスを処理する必要があります。

public T queryFirst (java.lang.String sql, Class returnClass, Object... parameters)
2 番目の形式の queryFirst() メソッドは、タイプ <T> の結果を戻すために汎用メソッドを使用します。
例えば、EMPNO が "000070" である従業員に関する Employee Bean のインスタンスが必要な場合があります。 Employee Bean の定義は、以下のようになります。
public Employee { 
@Column(name="EMPNO")  
public String employeeId; 
@Column(name="FIRSTNME")  
public String firstName; 
@Column(name="MIDINIT")  
public String middleInitial; 
public String lastName; 
@Column(name="WORKDEPT")  
public String departmentId; 
@Column(name="PHONENO")  
public String extension; 
public Date hireDate;   }
EMPNO 列は、EMPLOYEE 表の主キーです。照会の WHERE 節にその列が含まれる場合、メソッドは 1 つの Employee オブジェクトのみを戻すことができます。コードは、以下のようになります。
Connection con = DriverManager.getConnection(...); 
Data db = DataFactory.getData(con); 
String managerEmp = "000070"; 
com.company.Employee empData = db.queryFirst(   "SELECT EMPNO, FIRSTNME, MIDINIT, LASTNAME, WORKDEPT," +
     " PHONENO, HIREDATE FROM HRDept.Employee" +
     " WHERE EMPNO = ?", Employee.class, managerEmp );
public T queryFirst (java.lang.String sql, RowHandler singleRowHandler, Object... parameters)
3 番目の形式の queryFirst() メソッドも、タイプ <T> の結果を戻します。
例えば、従業員に関する情報が必要な場合がありますが、pureQuery は Employee Bean のプロパティーに照会の結果を自動的にマップできない場合があります。RowHandler を作成してそのマッピングを実行することができます。

フィードバック