tags:

views:

106

answers:

1

I want to retrieve the most recently updated value in the table using an insert query.

these are the datatypes in my sql table.

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

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  A: 

You need to call 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);
Pascal Thivent
i was trying several combinations. not this one!
iamrohitbanga
That's right, but I would however put that inside an `if` block. Also see [this answer](http://stackoverflow.com/questions/1915166/jdbc-how-can-we-get-inserted-record-id-in-java/1915197#1915197).
BalusC
@BalusC you're absolutely right. Fixed.
Pascal Thivent