학원/JDBC
10/24 27-4 (insertSQLAutoGeneratedKeys)
도원결의
2022. 10. 24. 18:14
입력한 행의 자동 생성된 키 값(일련번호) 가져오기!
시퀀스 가져오는거
이거 어디다가 씀??
게시판 글 작성 후 작성한 글로 이동(글 보려고)하기 위해선 내가 작성한 글 번호를 알아야 함
그 번호를 알아내기 위한 키 값 알아내기 !!
// 이거 부모클래스 만들기 전에 했나보네.... 걍 복습 겸 다시 정리 해 !!
public class insertSQLAutoGeneratedKeys {
//멤버변수
private Connection conn;
private Statement stmt;
//생성자
public insertSQLAutoGeneratedKeys() {
try {
Class.forName("oracle.jdbc.OracleDriver"); // 오라클 드라이버 로딩
conn= DriverManager.getConnection("jdbc:oracle:thin:@127.0.0.1", "KOSMO","KOSMO"); // 연결시도
}
catch (ClassNotFoundException e) {
System.out.println("드라이버 클래스가 없어요, 드라이버 로딩 실패...");
}
catch (SQLException e) {
System.out.println("데이터베이스 연결 실패");
}
}///////
private void execute() {
try {
stmt = conn.createStatement(); // 쿼리 실행 객체생성
/* Statement계열 객체로 쿼리 실행
쿼리문이 DELETE/UPDATE/INSERT일때는 int executeUpdate()
쿼리문이 SELECT일때는 ResultSet executeQuery() 호출 */
String sql = "INSERT INTO bbs VALUES(SEQ_BBS.NEXTVAL,'제목6','PARK',sysdate)";
try {
//반환값은 영향받은 행의 수 내용같음!
// int affected = stmt.executeUpdate(sql, Statement.RETURN_GENERATED_KEYS);// my-sql,MSQL용, 오라클은 안됨
// int affected = stmt.executeUpdate(sql,new int[] {1}); // 이게 오라클용
int affected = stmt.executeUpdate(sql,new String[] {NO"}); // 오라클은 이렇게 해도 됨
//자동 생성된 키(숫자=pk) 값 얻기
ResultSet rs = stmt.getGeneratedKeys();
if(rs.next()) {
System.out.println("입력된 행의 자동생성된 키값:"+rs.getInt(1)); // 이거 인자는 무조건 1!!! PK값 얻는거라서 걍 무조건 1 씀!
}
System.out.println(affected + "행이 입력되었어요");
}
catch(SQLException e) {
System.out.println("INSERT쿼리문 실행 오류:"+e.getMessage());
}
}
catch(SQLException e) {
System.out.println("statement 객체 생성 실패");
}
finally {
close();
}
}////////////
private void close() {
try {
if (stmt != null) stmt.close();
if (conn != null) conn.close();
}
catch(SQLException e) {}
}
public static void main(String[] args) {
new insertSQLAutoGeneratedKeys().execute();
}/////
}/////
이거 지금 MEMBER랑 연결 되어 있어서 부모KEY랑 연동되어 있는 것만 입력 가능함!