1 つの行のみが戻されると判断した場合、pureQuery は、FETCH FIRST ROW ONLY 節を追加するか、あるいは SELECT ステートメントを SELECT-INTO ステートメントに変更することによって、照会を最適化することがあります。
Data インターフェースは、3 つの形式の queryFirst() メソッドを提供します。
以下のコードは、キー 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 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; }
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 );