포스트

03. DML

1) PrefaredStatement

  • SQL문장이 미리 컴파일 되고 실행 시간동안 인수 값을 위한 공간을 확보한다
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
사용법
  1) palceholder : "?" 사용
  2) placeholder는 복수 사용 가능. "?" 나오는 순서에 따라 번호 부여
  3) 참조변수명.set자료형(번호, );

주의사항
  stmt = conn.createStatement();
  rs = stmt.executeQuery(sql);
  
  pstmt = conn.prepareStatement(sql);
  pstmt.setInt(1, 2000000);
  rs = pstmt.executeQuery();

  Statement  다르게 객체가 생성되면서 동시에 sql을 담는다. 
  DB와 커넥션  ResultSet을 가져오는 코드 작성에 sql을 넣으면 안된다
1
2
3
4
5
6
7
String sql = "SELEC EMP_NAME, EMP_NO, DEPT_CODE, SALARY"
           + " FROM EMPLOYEE"
           + " WHERE SALARY > ?";

pstmt = conn.prepareStatement(sql);
pstmt.setInt(1, 2000000);
rs = pstmt.executeQuery();

2) DML(INSERT, UPDATE, DELETE)

  • DB에서 DML 수행 시 수행 후 int 반환
  • 따라서 JDBC에서 ResultSet을 받을 필요 없이 int 변수에 결과 저장
  • DB에 sql 수행시 .executeUpdate(); 로 시행
  • Connection 하는 과정과 참조변수 닫고 메모리 반환하는 과정에서 자동 commit 되므로 세팅 필요
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
int result;

conn = DriverManager.getConnection(url, user, pw);
conn.setAutoCommit(false);

....

result = pstmt.executeUpdate();

....

if(result > 0) conn.commit();
else conn.rollback();

....