2010-05-18 5 views
8

삽입 쿼리를 사용하여 테이블에서 가장 최근에 업데이트 된 값을 검색하려고합니다.sql jdbc getgeneratedkeys가 열 "id"를 찾을 수 없음, 열 유형을 알 수 없음을 반환합니다.

이들은 내 SQL 테이블에있는 데이터 유형입니다.

데이터 유형 :

int(11)  // primary key auto increment, not being assigned by sqlQuery 
varchar(30) 
timestamp // has a default value. but i am explicit assigning it using CURRENT_TIMESTAMP 
varchar(300) 
varchar(300) 
varchar(300) 
int(11) 
varchar(300) 

자바 코드

statement.executeUpdate(sqlQuery, Statement.RETURN_GENERATED_KEYS); 
    ResultSet rs = statement.getGeneratedKeys(); 
    System.out.println("here: " + rs.getMetaData().getColumnCount()); 
    System.out.println("here1: " + rs.getMetaData().getColumnName(1)); 
    // none of the following 3 works 
    System.out.println("id: " + rs.getInt(1)); 
    System.out.println("id: " + rs.getInt("GENERATED_KEY")); 
    System.out.println("id: " + rs.getInt("id")); 
    for a bit of background see [this][1] 
    `rs.getMetaData().getColumnTypeName(1)` tells me column type `UNKNOWN` 

스택 추적

SEVERE: null 
    java.sql.SQLException 
    at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1055) 
    at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:956) 
    at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:926) 
    at com.mysql.jdbc.ResultSetImpl.checkRowPos(ResultSetImpl.java:815) 
    at com.mysql.jdbc.ResultSetImpl.getStringInternal(ResultSetImpl.java:5528) 
    at com.mysql.jdbc.ResultSetImpl.getString(ResultSetImpl.java:5448) 
    [1]: http://stackoverflow.com/questions/2853066/sql-java-get-value-assigned-to-auto-increment-primary-key 
당신은를 호출 할 필요가
+0

은 명확하지 않은 질문입니까? –

+0

어떤 버전의 MySQL과 MySQL 커넥터를 사용하고 있습니까? –

답변

13

:

int autoIncKeyFromApi = -1; 
rs = stmt.getGeneratedKeys(); 
if (rs.next()) { 
    autoIncKeyFromApi = rs.getInt(1); 
} else { 
    // do what you have to do 
} 
System.out.println(autoIncKeyFromApi); 
+0

몇 가지 조합을 시도했습니다. 이건 아니야! –

+0

맞아요.하지만 그걸'if' 블록 안에 넣을 수는 있습니다. 또한 [이 답변] (http://stackoverflow.com/questions/1915166/jdbc-how-can-weget-inserted-record-id-in-java/1915197#1915197)을 참조하십시오. – BalusC

+0

@BalusC 당신은 절대적으로 옳습니다. 결정된. –

2

아마도 sqlQuery가 새로운 레코드를 작성하지 않기 때문일 수 있습니다. 이 경우 빈 결과 집합을 반환합니다. getGeneratedKeys()의 사양을 살펴보십시오

관련 문제