Supposez que vous souhaitiez insérer un enregistrement dans la table HRDept.Employee définie de cette manière :
CREATE TABLE HRDept.Employee( EMPNO CHAR(6) NOT NULL, FIRSTNME VARCHAR(12) NOT NULL, MIDINIT CHAR(1), LASTNAME VARCHAR(15), WORKDEPT CHAR(2), PHONENO CHAR(4), HIREDATE DATE, PRIMARY KEY(EMPNO))
Le bean correspondant est défini de la manière suivante :
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; }
public int update(java.lang.String sql, Object... parameters)votre logique d'application peut être similaire au code suivant :
Connection con = DriverManager.getConnection(...); Data db = DataFactory.getData(con); Employee newCollegeHire = new Employee("000010", "CHRISTINE", "I", "HAAS", "A00", "3978", new java.sql.Date(System.currentTimeMillis())); int oneCount = db.update( "INSERT INTO HRDept.Employee(EMPNO, FIRSTNME," + " MIDINIT, LASTNAME, WORKDEPT, PHONENO, HIREDATE) " + "VALUES(:employeeId, :firstName, :middleInitial," + " :lastName, :departmentId, :extension," + " :hireDate )", newCollegeHire );
Vous souhaitez ajouter un nouveau projet "PAYROLL PROGRAMMING" à la table HRDept.PROJ. Cependant, vous disposez d'informations uniquement sur les propriétés projName, departNo, respEmp, et majProj de l'objet DeptProject que vous prévoyez d'utiliser pour transmettre les valeurs à l'instruction INSERT dans la méthode update().
Eventuellement, vous disposerez d'informations pour le reste des propriétés de l'objet DeptProject. Pour mettre à jour l'enregistrement du projet "PAYROLL PROGRAMMING" avec ces informations restantes, vous devrez connaître la valeur de la colonne PROJID qui est une colonne d'identité générée utilisée comme une clé primaire.
Ainsi, lorsque vous insérez le nouvel enregistrement, vous avez besoin d'un moyen permettant de récupérer la valeur générée dans la colonnePROJID et de placer cette valeur dans la propriété projId de l'objet DeptProject.
Voici la définition de la table HRDept.PROJ :
CREATE TABLE HRDept.PROJ (PROJID INTEGER GENERATED ALWAYS AS IDENTITY NOT NULL, PROJNAME VARCHAR(24), DEPTNO CHAR(3), RESPEMP CHAR(6), PRSTAFF DECIMAL(5, 2), PRSTDATE DATE, PRENDATE DATE, MAJPROJ INTEGER, PRIMARY KEY(PROJID))
Voici la définition de DeptProject, le bean correspondant à cette table :
public class DeptProject { @GeneratedKey public Integer projId; public String projName; public String departNo; public String respEmp; public BigDecimal prStaff; public Date prStDate; public Date prEnDate; public String majProj; }
public int update(java.lang.String sql, Object... parameters)votre code pour insérer une ligne dans la table HRDept.PROJ peut se présenter comme suit :
Connection con = DriverManager.getConnection(...); Data db = DataFactory.getData(con); DeptProject newProject = new DeptProject ("PAYROLL PROGRAMMING", "A00", "000010", 319); // 319: GENERAL AD SYSTEMS int updateCount = db.update( "INSERT INTO " + "HRDept.PROJ(PROJNAME, DEPTNO, RESPEMP, MAJPROJ) " + "VALUES(:projName, :departNo, :respEmp, :majProj)", newProject);
Etant donné que la propriété projId de l'objetDeptProject est définie avec une annotation @GeneratedKey et que la colonne PROJID est définie comme une colonne d'identité générant toujours un entier, la valeur de la colonne PROJID est transmise à la propriété projId avant que la commande ne soit renvoyée de l'appel vers la méthode update().
Lorsque vous obtenez ensuite des informations sur le nombre de membres du personnel du projet, sur la date de début et la date de fin, vous pouvez utiliser la valeur de projId lors de la mise à jour de la ligne du projet dans la table HRDept.PROJ.
newProject.prStaff = ...; newProject.prStDate = ...; newProject.prEnDate = ...; oneCount = db.update("UPDATE HRDept.PROJ SET " + "PRSTAFF=:prStaff, PRSTDATE=:prStDate, " + "PRENDATE=:prEnDate WHERE PROJID=:projId ", newProject);
Si vous souhaitez transmettre des valeurs sans bean et récupérer les valeurs générées dans un objet autre qu'un bean, vous pouvez utiliser la version suivante de la méthode update() :
<T> T update(java.lang.String sql, Class<T> returnClass, String[] columnNames, Object... parameters)
Lorsque le type de renvoi est Object[].class, les premiers éléments n du tableau sont les valeurs n générées à partir des colonnes du paramètre generatedColNames. Le dernier élément du tableau est le nombre de mises à jour.
Lorsque le type de renvoi est une classe JDBC simple et pouvant être directement attribuée, une valeur générée unique de type donnée est renvoyée. Le nombre de mises à jour n'est pas renvoyé.
Par exemple, un projet peut être représenté par Object[] et non par un bean. La table HRDept.PROJ peut être mise à jour et le clé générée pour le nouveau projet est récupérée comme suit :
Object[] myProj = new Object[4]; myProj[0] = ...; myProj[1] = ...; myProj[2] = ...; myProj[3] = ...; String[] generatedColNames = new String[] {"PROJID"}; Integer generatedProjID; String sql = "INSERT INTO HRDept.PROJ(PROJNAME, DEPTNO, " + "RESPEMP, MAJPROJ) values (?, ?, ?, ?)"; generatedProjID = db.update( sql, Integer.class, generatedColNames, myProj);