복붙노트

[SQL] SQL JDBC getgeneratedkeys 반환 열 "ID"을 (를) 찾을 수 없습니다, 열 유형의 알 수없는

SQL

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

해결법

  1. ==============================

    1.당신은 () 호출 rs.next 필요 :

    당신은 () 호출 rs.next 필요 :

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

    2.아마 SQLQuery 인이 새로운 레코드를 생성하지 않기 때문입니다! 이 경우, 빈의 ResultSet을 반환합니다 ) (getGeneratedKeys의 사양 봐

    아마 SQLQuery 인이 새로운 레코드를 생성하지 않기 때문입니다! 이 경우, 빈의 ResultSet을 반환합니다 ) (getGeneratedKeys의 사양 봐

  3. from https://stackoverflow.com/questions/2854774/sql-jdbc-getgeneratedkeys-returns-column-id-not-found-column-type-unknown by cc-by-sa and MIT license