Data 인터페이스의 update() 메소드를 사용한 단일 갱신

Data 인터페이스의 오버로드된 update() 메소드를 사용하여 0개 이상의 데이터베이스 오브젝트 행을 갱신할 수 있습니다.

예 1: Bean에서 값을 전달하여 테이블에 행 삽입

다음과 같이 정의된 HRDept.Employee 테이블에 레코드를 삽입하려는 경우를 가정하십시오.

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))

해당 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;
}
update() 메소드의 다음 버전을 사용
public int update(java.lang.String sql, Object... parameters)
응용프로그램 논리는 다음 코드와 유사합니다.
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 );

예 2: Bean에서 값을 전달하여 행을 삽입하고 생성된 값을 해당 Bean으로 검색

새 "PAYROLL PROGRAMMING" 프로젝트를 HRDept.PROJ 테이블에 추가하려 합니다. 그러나 update() 메소드의 INSERT문에 값을 전달하기 위해 사용할 계획인 DeptProject 오브젝트의 projName, departNo, respEmp 및 majProj 등록 정보에 대한 정보만 있습니다.

결국에는 DeptProject 오브젝트의 나머지 등록 정보에 대한 정보를 갖게 됩니다. 나머지 해당 정보를 사용하여 "PAYROLL PROGRAMMING" 프로젝트에 대한 레코드를 갱신하려면 기본 키로 사용되는 생성된 ID 컬럼인 PROJID 컬럼의 값을 알아야 합니다.

따라서 새 레코드를 삽입할 때 PROJID 컬럼에 생성된 값을 검색하고 DeptProject 오브젝트의 projId 등록 정보에 해당 값을 저장하는 방법이 필요합니다.

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))

이 테이블에 해당하는 Bean인 DeptProject의 정의는 다음과 같습니다.

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;
}
update() 메소드의 다음 버전을 사용
public int update (java.lang.String sql, Object... parameters)
your HRDept.PROJ 테이블에 행을 삽입하는 코드는 다음과 같을 수 있습니다.
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);

DeptProject 오브젝트의 projId 등록 정보가 @GeneratedKey 어노테이션으로 정의되고 PROJID 컬럼이 항상 정수를 생성하는 ID 컬럼으로 정의되므로 제어가 update() 메소드에 대한 호출에서 리턴되기 전에 PROJID 컬럼의 값이 projId 등록 정보에 전달됩니다.

나중에 프로젝트의 직원 레벨, 시작 날짜 및 종료 날짜에 대한 정보를 가져오는 경우, HRDept.PROJ 테이블의 프로젝트 행을 갱신할 때 projId의 값을 사용할 수 있습니다.

newProject.prStaff = ...;
newProject.prStDate = ...;
newProject.prEnDate = ...;

oneCount = db.update("UPDATE HRDept.PROJ SET " +   
    "PRSTAFF=:prStaff, PRSTDATE=:prStDate, " +
    "PRENDATE=:prEnDate WHERE PROJID=:projId ", 
    newProject);

예제 3: 오브젝트 배열에 값을 전달하여 행을 삽입하고 생성된 값을 오브젝트 배열 또는 단순 클래스에서 검색

Bean을 사용하지 않고 값을 전달하고 Bean 이외의 오브젝트로 생성된 값을 검색하려는 경우, update() 메소드의 다음 버전을 사용할 수 있습니다.

<T> T update(java.lang.String sql, Class<T> returnClass, String[] columnNames,
             Object... parameters)
이 메소드는 표시된 리턴 유형에 따라 하나 이상의 생성된 값을 리턴합니다. 리턴 유형 Class<T>의 값은 다음 중 하나여야 합니다.
  • Object[].class
  • JDBC에서 직접 지정할 수 있는 단순 클래스(예: Integer.class 또는 String.class)

리턴 유형이 Object[].class인 경우, 배열의 처음 n개 요소는 generatedColNames 매개변수의 컬럼에서 n개의 생성된 값입니다. 배열의 마지막 요소는 갱신 계수입니다.

리턴 유형이 직접 지정할 수 있는 단순 JDBC 클래스인 경우, 주어진 유형의 단일의 생성된 값이 리턴됩니다. 갱신 계수는 리턴되지 않습니다.

예를 들어, 프로젝트가 Bean이 아니라 Object[]로 표시될 수 있습니다. HRDept.PROJ 테이블이 갱신될 수 있고 새 프로젝트에 대해 생성된 키가 다음과 같이 검색될 수 있습니다.

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);

피드백