2010-05-18 44 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) 

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` 

堆棧跟蹤

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

問題不清楚? – 2010-05-18 07:28:58

+0

您使用的是哪個版本的MySQL和MySQL連接器? – 2010-05-18 10:52:54

回答

13

你需要調用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

我正在嘗試幾種組合。不是這個! – 2010-05-18 11:34:39

+0

沒錯,但是我會把它放在'if'塊中。另見[這個答案](http://stackoverflow.com/questions/1915166/jdbc-how-can-we-get-inserted-record-id-in-java/1915197#1915197)。 – BalusC 2010-05-18 12:39:23

+0

@BalusC你是對的。固定。 – 2010-05-18 12:44:44

2

也許這是因爲sqlQuery不會創建任何新記錄! 在這種情況下,它會返回一個空的ResultSet 請看getGeneratedKeys()的規格說明

相關問題