Si pureQuery détermine qu'une seule ligne doit être retournée, il peut choisir d'optimiser la requête en ajoutant la clause FETCH FIRST ROW ONLY ou en modifiant l'instruction SELECT et en la remplaçant par une instruction SELECT-INTO.
L'interface Data fournit trois formes de la méthode queryFirst().
Le code suivant produit une mappe unique contenant des clés average_edlevel et workdept. Le code transmet la valeur de REPORTDEPT pour identifier le département concerné.
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 );
Au lieu d'une mappe, on pourrait utiliser l'une des deux autres formes de la méthode queryFirst(), chacune renvoyant une instance d'une classe existante.
Par exemple, le renvoi des informations d'une classe com.company.Employee peut être suffisant. Ce bean possède des propriétés pouvant stocker les deux éléments d'information qui vous intéressent. Toutefois, il n'est pas conseillé de remplir un bean Employee si vous n'avez pas l'intention de fournir les valeurs de toutes les propriétés du bean
Vous pourriez également définir un nouvel objet Java, éventuellement en tant que classe privée, capable de stocker exactement les informations nécessaires. Dans de nombreuses situations, il peut s'agir de la meilleure solution car elle fournit un code clair qui se documente lui-même. Toutefois, cette solution nécessiterait une logique d'application supplémentaire pour traiter une instance de cette nouvelle classe, par exemple en saisissant son contenu dans feuille de calcul ou en envoyant le contenu vers un document 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") opublic 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 );