본문 바로가기
MySql

MySQL PreparedStatement를 사용하여 삽입하십시오. ID를 자동으로 늘리려면 어떻게합니까?

by 베이스 공부 2020. 12. 29.
반응형

다음과 같은 PreparedStatement가 있습니다.

 PreparedStatement preparedStatement = connect.prepareStatement("INSERT into employee (id, time, name" + "(?,?,?)",Statement.RETURN_GENERATED_KEYS);
 ResultSet tableKeys = preparedStatement.getGeneratedKeys();
 preparedStatement.executeUpdate();
 tableKeys.next();
 int autoGeneratedID = tableKeys.getInt(1);
 preparedStatement.setInt(1,autoGeneratedID);
 preparedStatement.setTimestamp(2, new java.sql.Timestamp(new java.util.Date().getTime()));                           
 preparedStatement.setString(3, "Test");
 preparedStatement.executeUpdate();

보시다시피 Employee 테이블에는 자동 증가 된 ID가 있습니다. 기본적으로 prepareStatement를 사용하여 자동으로 추가해야합니다. 누군가 내가 어디로 잘못 가고 있는지 말해 줄 수 있습니까? 지금은 Statement와 관련된 오류가 발생합니다.

 

해결 방법

 

INSERT 문에서 열을 완전히 남겨 둡니다. 데이터베이스 엔진에 의해 생성됩니다. 쿼리는 다음과 같아야합니다.

INSERT INTO employee (time, name)
VALUES (?, ?)

둘째, 먼저 삽입을 수행 한 다음 결과에서 키를 가져와야합니다.

귀하의 코드는 다음과 같아야한다고 생각합니다.

PreparedStatement preparedStatement = 
    connect.prepareStatement("INSERT into employee (time, name) VALUES (?,?)", 
    Statement.RETURN_GENERATED_KEYS);

preparedStatement.setTimestamp(1, 
    new java.sql.Timestamp(new java.util.Date().getTime()));                           
preparedStatement.setString(2, "Test");

preparedStatement.executeUpdate();

ResultSet tableKeys = preparedStatement.getGeneratedKeys();
tableKeys.next();
int autoGeneratedID = tableKeys.getInt(1);

이 예제는 실행 된 문의 성공 또는 반환 된 키의 존재 여부를 확인하지 않습니다.

 

참조 페이지 https://stackoverflow.com/questions/17438288

 

 

반응형

댓글