2012-03-28 3 views
1

Это относится к оператору обновления sql, использующему JDBC. На самом деле, я изучаю некоторые проблемы, которые у нас были, и все это зависало в момент, когда оператор обновления возвращал ноль при попытке обновить определенную строку.Оператор обновления oracle Jdbc возвращает ноль

Теперь, чтобы прояснить это, СПЕЦИФИЧЕСКОЕ ЗАЯВЛЕНИЕ ОБ ОБНОВЛЕНИИ ROW ПЫТАЕТСЯ ОБНОВИТЬ ДЕЙСТВИЕ В таблице. Таким образом, нет возможности записи, не найденной и, следовательно, нулевого обновления.

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

Большое спасибо, Ameer Mawia

+6

«Таким образом, нет возможности записи не найден» - это обычно то, что сказано * просто * раньше, «Ах, * это *, почему запись не найдена ...» Пожалуйста, покажите код. –

+0

Я под управлением сервера не разделяю код, хотя могу сказать, что он довольно мирский, получает соединение, создает подготовленный оператор и выполняет его. Надеюсь, вы оцените это ограничение, которому я должен уважать. – mawia

+0

Не совсем так, потому что вы не указали, как вы проверили, что он * действительно * находит строку. Например, если вы измените 'UPDATE' на' SELECT' и удалите новые значения (но в остальном не трогайте запрос), то вы * затем * видите, что он работает?По моему опыту, это, скорее всего, опечатка, такая же обыденная, как и запрос ... –

ответ

0

executeUpdate

INT executeUpdate() бросает SQLException

выполняет оператор SQL в этом PreparedStatement объект, который должен быть Манипулирование SQL Data Language (DML) заявление, такое как INSERT, UPDATE или DELETE; или SQL-оператор, который ничего не возвращает, например, оператор DDL.

Возвращает: либо (1) количество строк для SQL Data Manipulation Language (DML) заявления или (2) 0 для операторов SQL, которые не возвращают ничего Броски: SQLException - если ошибка доступа к базе данных; этот метод вызывается на замкнутом PreparedStatement или SQL оператор возвращает объект ResultSet

Просто сказать, что документ определяет:

«Обратите внимание, что если возвращаемое значение для executeUpdate равно 0, это может означать одно из двух вещи:

Заявление, выполненное, было оператором обновления, который затрагивал нулевые строки. Выполненный оператор был оператором DDL. "

0

К сожалению, я не знаю, как опубликовать комментарий еще, так что ...

От Oracle:

http://docs.oracle.com/javase/tutorial/jdbc/basics/prepared.html

Обратите внимание, что если возвращаемое значение для executeUpdate является 0, то может означать одно из двух:

* The statement executed was an update statement that affected zero rows. 
* The statement executed was a DDL statement. 

Так что, казалось бы, заявление Update может получать искажено каким-то образом вы не ожидали. Я бы подумал, что это был случай, когда исключение не было выбрано. Если это повторяемо, вы должны иметь возможность контролировать SQL, который был отправлен на серверной стороне, и посмотреть, что у вас отсутствует.

Смежные вопросы