Java, PreparedStatement, TransactSQL (MS SQL), идентификатор последней вставки

Я вставляю некоторые значения в базу данных с помощью PreparedStatement, но кажется, что в этом случае я не могу получить последний идентификатор вставки.

Я пытаюсь использовать тот же оператор, что и для операторов (ниже), но он не работает. В нем говорится, что .executeQuery() не может принимать аргументы в этом случае.

На самом деле мне не нужен последний идентификатор вставки, подойдет количество затронутых строк, но как мне его получить? Я думал, что метод PreparedStatement .executeUpdate() вернет количество затронутых строк, но, по-видимому, это не так.

Вот метод.

 public static int getLastInsertId(Statement stmt) throws SQLException {
  String sql = "SELECT SCOPE_IDENTITY() AS id";

  ResultSet rs = stmt.executeQuery(sql);
  int id = 0;
  while (rs.next()) {
   id = rs.getInt("id");
  }
  return id;
 }

Заранее спасибо.


person Ibolit    schedule 30.11.2010    source источник
comment
Вы никогда не закрываете ResultSet?   -  person Buhake Sindi    schedule 30.11.2010
comment
что вы видите, когда выполняете этот запрос из консоли или из любого внешнего интерфейса?   -  person jmj    schedule 30.11.2010
comment
Спасибо, что указали на это. Я обычно так делаю, обещаю :)   -  person Ibolit    schedule 30.11.2010
comment
Дело в том, что запрос в этом PreparedStatement является своего рода условным (см. ниже), и когда я запускаю его в диспетчере MS SQL, он ничего не вставляет (как и ожидалось).   -  person Ibolit    schedule 30.11.2010
comment
if ((выбрать COUNT(id) как количество из tNewSchedule, где ManID = 464 и (type & 264) › 0 и status = 0) = 0) НАЧАТЬ ВСТАВИТЬ В tnewschedule (type, to_review, manid, parent) -- ЗНАЧЕНИЯ (300 , '2010-11-30 16:30:16.036', 464, 271); КОНЕЦ   -  person Ibolit    schedule 30.11.2010
comment
Идея состоит в том, что если мы что-то вставляем этим запросом, мы выполняем другой. Для этого мне нужен либо последний идентификатор вставки, либо количество затронутых строк.   -  person Ibolit    schedule 30.11.2010


Ответы (1)


Метод executeUpdate для PreparedStatement действительно возвращает количество затронутых строк...

person Brian Knoblauch    schedule 30.11.2010
comment
Судя по всему, так и есть. Меня немного смутила формулировка в их javadoc, и я немного перепутал параметры для подготовленного заявления (их много). Спасибо, и извините за мою ошибку. - person Ibolit; 30.11.2010