Database/RDBMS

[MySQL] jdbc Insert AutoIncrement 값 가져오기

기은P 2020. 7. 30. 16:45
반응형

[MySQL] jdbc Insert AutoIncrement 자동증가 값 가져오기

 

 

MySQL 데이터베이스에 jdbc를 이용해서 Insert하는 쿼리를 작성할 때,

PK값이 AutoIncrement로 되어 있는데, 이 자동 증가된 값을 코드 상에서 사용해야 할 때가 있습니다.

이럴 때, PreparedStatement 객체에서 쿼리를 실행하고 난 후, getGeneratedKeys()함수로 ResultSet에 결과 키 값을 저장하면 AutoIncrement 값을 가져올 수가 있습니다.

 

 

 

 

1. 실행코드

 


	public void RuleConvertDatabaseInit() {
		try {
			conn = DriverManager.getConnection(
					DatabaseConfig.driverTag + DatabaseConfig.url + "/" + DatabaseConfig.SchemaRuleDataConvert,
					DatabaseConfig.id, DatabaseConfig.pw);
			stmt = conn.createStatement();
		} catch (SQLException e) {
			MessageDialog.openError(Activator.ActiveShell().getShell(), "데이터베이스 초기화 에러", e.getMessage());
		}
	}

public int InsertMetadataFile(String profile, String name, String pid) {
		int autoincrement = 0;
		try {
			RuleConvertDatabaseInit(); // DriverManager.getConnection 관련 초기화 코드
			String query = "INSERT INTO metadatafile (IsMultiple, Profile, RuleName, FileHashKey) VALUES (?,?,?,?) ";

			PreparedStatement pstmt = conn.prepareStatement(query); // String으로 쿼리 작성
			pstmt.setInt(1, 0);
			pstmt.setString(2, profile);
			pstmt.setString(3, name);
			pstmt.setString(4, pid);

			pstmt.executeUpdate(); // ?,?,... Values 값에 인자 매칭시키고 쿼리 실행
            
			ResultSet rs = pstmt.getGeneratedKeys(); // 쿼리 실행 후 생성된 키 값 반환
			if (rs.next()) {
				autoincrement = rs.getInt(1); // 키값 초기화
				System.out.println("autoIncrement: " + autoincrement); // 출력
			}

			CloseDB();
			return autoincrement;
		} catch (SQLException e) {
			MessageDialog.openError(Activator.ActiveShell().getShell(), "데이터베이스 에러", e.getMessage());
			autoincrement = -1;
		}
		return autoincrement;
	}

 

 

RuleConvertDatabaseInit()은 MySQL 데이터베이스에 연결하기 위한 설정값을 초기화하기 위해 사용한 함수인데요.

jdbc MySQL 데이터베이스 초기화 하는 코드는 다른 글에서 확인할 수 있으니 그 글을 참고하시면 되고,

 

 

- 실행순서

1) 데이터베이스 초기화 후 Insert 쿼리 작성

2) executeUpdate()로 쿼리 객체 실행

3) getGeneratedKeys()로 생성된 키값 ResultSet에 저장

4) rs.next(), rs.getInt(1)로 키값 가져오기

 

순서대로 코드가 진행됩니다.

잘 이해가 안가시는 부분이 있으면 알려드리겠습니다.

 

 

 

 

 

 

반응형