반응형
공식 문서 참조
https://docs.oracle.com/javase/7/docs/api/java/sql/PreparedStatement.html
데이터를 INSERT 한 뒤 auto_increment 값을 가져와야 하는 경우가 있을 수 있다.
Connection.prepareStatement를 사용해 (statement도 가능은 하다) 두 번째 매개변수 값으로 auto_increment 값인 열 이름을 주면 이 개체를 사용하여 효율적으로 실행할 수 있다.
원형
PreparedStatement prepareStatement(String sql,
String[] columnNames)
throws SQLException
원형은 위와 같다. 따라서 두 번째 인자 값으로는 문자열 배열 형태로 값을 넣어주어야 한다.
첫 번째 인자 값은 SQL문이 들어가는데 만약 이 SQL문이 INSERT문이 아니거나 auto_increment 값을 반환할 수 있는 SQL이 아닌 경우 두 번째 인자 값을 무시한다.
예제
아래는 게시판 만들기 코드에서 사용된 코드 중 일부이다.
public int insert(BookDTO dto) throws SQLException {
int cnt = 0;
String title = dto.getTitle();
String summary = dto.getSummary();
int price = dto.getPrice();
int uid;
String[] generatedCols = {"bk_uid"};
try {
pstmt = conn.prepareStatement(D.SQL_BOOK_INSERT, generatedCols);
pstmt.setString(1, title);
pstmt.setString(2, summary);
pstmt.setInt(3, price);
cnt = pstmt.executeUpdate();
if (cnt > 0) {
rs = pstmt.getGeneratedKeys();
if (rs.next()) {
uid = rs.getInt(1);
dto.setUid(uid);
}
}
} finally {
close();
}
return cnt;
}
generatedCols라는 문자열 배열에 auto_increment 열 이름인 bk_uid라는 값을 넣어주고,
prepareStatement를 사용할 때 두 번째 인자 값으로 넣었다.
이후 pstmt 인스턴스의 getGeneratedKeys() 메서드를 사용하여 bk_uid 값을 불러올 수 있다.
반응형