MySQL & Java-получить идентификатор последнего вставленного значения (JDBC) [дубликат]


Возможные Дубликаты:
как получить идентификатор вставки в JDBC?

Привет, я использую JDBC для подключения к базе данных через Java.

теперь я делаю запрос на вставку, и мне нужно получить идентификатор последнего вставленного значения (так, после stmt.executeUpdate).

мне не нужно что-то вроде SELECT id FROM table ORDER BY id DESC LIMIT 1, потому что у меня могут возникнуть проблемы параллелизма.

мне просто нужно получить идентификатор, связанный с последней вставкой (о мой пример заявления).

Я пробовал это, но, кажется, это не работает на JDBC:

public Integer insertQueryGetId(String query) {
    Integer numero=0;
    Integer risultato=-1;
    try {
        Statement stmt = db.createStatement();
        numero = stmt.executeUpdate(query);

        ResultSet rs = stmt.getGeneratedKeys();
        if (rs.next()){
            risultato=rs.getInt(1);
        }
        rs.close();

        stmt.close();
    } catch (Exception e) {
        e.printStackTrace();
        errore = e.getMessage();
        risultato=-1;
    }
  return risultato;
}

в самом деле, каждый раз risultato = -1, а я java.sql.SQLException: Generated keys not requested. You need to specify Statement.RETURN_GENERATED_KEYS to Statement.executeUpdate() or Connection.prepareStatement().

как я могу исправить эту проблему? Спасибо Stackoverflow Люди:)

2 78

2 ответа:

не могли бы вы просто изменить:

numero = stmt.executeUpdate(query);

to:

numero = stmt.executeUpdate(query, Statement.RETURN_GENERATED_KEYS);

взгляните на документацию для JDBC Statement интерфейс.

обновление: по-видимому, есть много путаницы в этом ответе, но я предполагаю, что люди, которые смущены, не читают его в контексте вопроса, который был задан. Если вы возьмете код, который ОП предоставил в своем вопросе, и замените одну строку (строка 6), что я предполагая, что все будет работать. Элемент numero переменная совершенно не имеет значения, и ее значение никогда не читается после ее установки.

в качестве альтернативы вы можете сделать:

Statement stmt = db.prepareStatement(query, Statement.RETURN_GENERATED_KEYS);
numero = stmt.executeUpdate();

ResultSet rs = stmt.getGeneratedKeys();
if (rs.next()){
    risultato=rs.getInt(1);
}

но вместо этого используйте ответ Шона Брайта для вашего сценария.