Wenn pureQuery ermittelt, dass nur eine Zeile zurückgegeben werden soll, kann gewählt werden, dass die Abfrage optimiert wird, indem die Klausel FETCH FIRST ROW ONLY hinzugefügt oder die Anweisung SELECT in eine Anweisung SELECT-INTO geändert wird.
Die Schnittstelle Data stellt drei Formen der Methode queryFirst() bereit.
Folgender Code erstellt ein einzelnes Map mit den Schlüsseln average_edlevel und workdept. Der Code übergibt den Wert REPORTDEPT, um die relevante Abteilung zu identifizieren.
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 );
Statt eines Map könnte auch eine der beiden Formen der Methode queryFirst() verwendet werden, die jeweils eine Instanz einer vorhandenen Klasse zurückgibt.
Die Rückgabe der Informationen in einer Klasse com.company.Employee könnte beispielsweise ausreichend sein. Diese Bean hat Eigenschaften, die in der Lage sind, die zwei Informationselemente zu speichern, an denen Sie interessiert sind. Es ist jedoch nicht empfehlenswert, eine Bean 'Employee' zu füllen, wenn Sie nicht die Werte aller Eigenschaften der Bean bereitstellen wollen.
Stattdessen könnten Sie ein neues Java™-Objekt definieren, möglicherweise als private Klasse, das in der Lage ist, exakt die benötigten Informationen zu speichern. In vielen Situationen ist dies möglicherweise die beste Lösung, weil dadurch selbsterklärender, klarer Code bereitgestellt wird. Diese Lösung erfordert jedoch eine zusätzliche Anwendungslogik zur Verarbeitung einer Instanz dieser neuen Klasse, beispielsweise durch Eingabe ihres Inhalts in ein Arbeitsblatt oder durch Senden ihres Inhalts an ein XML-Dokument.
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 );