sql jdbc getgeneratedkeys возвращает столбец "id" не найден, тип столбца неизвестен - PullRequest
8 голосов
/ 18 мая 2010

Я хочу получить последнее обновленное значение в таблице, используя запрос вставки.

это типы данных в моей таблице sql.

Datatype:

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

Ответы [ 2 ]

13 голосов
/ 18 мая 2010

Вам нужно позвонить 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 голосов
/ 06 ноября 2012

Может быть, это потому, что sqlQuery не создает новую запись! В этом случае он вернет пустой ResultSet Посмотрите на спецификацию getGeneratedKeys ()

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...