2010-05-18 7 views
8

Deseo recuperar el valor actualizado más recientemente en la tabla utilizando una consulta de inserción.sql jdbc getgeneratedkeys devuelve la columna "id" no encontrada, tipo de columna desconocido

estos son los tipos de datos en mi tabla sql.

Tipo de datos:

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) 

código java

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` 

seguimiento de la pila

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

¿La pregunta no está clara? –

+0

¿Qué versión de MySQL y del conector MySQL está usando? –

Respuesta

13

Es necesario llamar 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); 
+0

estaba probando varias combinaciones. ¡este no! –

+0

Correcto, pero lo pondría dentro de un bloque 'if'. También vea [esta respuesta] (http://stackoverflow.com/questions/1915166/jdbc-how-can-we-get-inserted-record-id-in-java/1915197#1915197). – BalusC

+0

@BalusC tienes toda la razón. Fijo. –

2

Tal vez sea porque el sqlQuery no crea ningún registro nuevo. En este caso, devolverá un ResultSet vacío Mire la especificación de getGeneratedKeys()

Cuestiones relacionadas