2010-05-18 4 views
8

Ich möchte den zuletzt aktualisierten Wert in der Tabelle mithilfe einer Einfügeabfrage abrufen.sql jdbc getgeneratedkeys gibt Spalte "id" nicht gefunden zurück, Spaltentyp unbekannt

Dies sind die Datentypen in meiner SQL-Tabelle.

Datentyp:

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) 

Java-Code

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` 

Stack-Trace

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

ist die Frage unklar? –

+0

Welche Version von MySQL und des MySQL-Connectors verwenden Sie? –

Antwort

13

Sie müssenanrufen:

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

Ich habe mehrere Kombinationen ausprobiert. nicht dieser! –

+0

Das stimmt, aber ich würde das in einen 'if'-Block schreiben. Siehe auch [diese Antwort] (http://stackoverflow.com/questions/1915166/jdbc-how-can-we-get-inserted-record-id-in-java/1915197#1915197). – BalusC

+0

@BalusC du hast absolut recht. Fest. –

2

Vielleicht liegt es daran, dass die sqlQuery keinen neuen Datensatz erstellt! In diesem Fall wird ein leeres ResultSet zurückgegeben Schauen Sie sich die Spezifikation von getGeneratedKeys()

Verwandte Themen