Как определить количество строк, измененных при выполнении JDBCJAVA

Программисты JAVA общаются здесь
Ответить Пред. темаСлед. тема
Anonymous
 Как определить количество строк, измененных при выполнении JDBC

Сообщение Anonymous »

Я не уверен, как получить количество строк, затронутых выполнением SQL.

Мне нравится это:

Код: Выделить всё

boolean isResultSet = statement.execute(arbitrarySQLCommand);
и я могу получить количество затронутых строк с помощью метода getUpdateCount(). Все в порядке. У меня проблема в том, что количество обновлений равно нулю. Это может означать следующее:
  • Это был оператор DML, но он не повлиял ни на какие строки. Затронутое ноль строк является допустимым ответом. Я просто имею в виду, что какое-то условие не было выполнено.
  • Это был оператор не-DML (скорее всего, оператор DDL).. который по определению не меняет строки поэтому количество обновлений всегда равно нулю (ага!). Или, говоря иначе: концепция количества обновлений не имеет смысла для таких утверждений.
Мне бы хотелось иметь возможность различать ситуации 1 и 2, описанные выше. Как?

Меня не интересуют операторы, которые производят выходные данные, поэтому я мог бы также использовать ExecuteUpdate(), но, насколько я понимаю, возвращаемое значение этого метода имеет тот же недостаток :


Возвращает:

либо (1) количество строк для данных SQL Операторы языка манипулирования (DML) или (2) 0 для операторов SQL, которые возвращают ничего


Ага!

Как бы мне хотелось:


Возвращает:

либо (1) количество строк для операторов языка манипулирования данными SQL (DML), либо (2) -1 для операторов SQL, которые ничего не возвращают


(примечание: содержимое произвольной SQLCommand мне заранее не известно)



Окончательное выбранное решение

Похоже, что настоящего JDBC-подобного решения проблемы не существует. На мой взгляд, разработчики JDBC допустили серьезную ошибку в getUpdateCount, используя значение 0 (ноль) для обозначения оператора, который (по определению) не влияет на строки, поскольку затрагиваемые нулевые строки также являются совершенно допустимыми. значение для результата оператора DML.

Похоже, что единственным возможным решением является сопоставление с шаблоном оператора SQL, чтобы выяснить, является ли он DML. заявление (INSERT,UPDATE,DELETE) или оператор SQL другого типа. Примерно так:
  • Извлечь первое слово из произвольной SQLCommand. Слово завершается
    либо пробелом, либо символом строки EOL.
  • Если это слово (игнорируя
    регистр) представляет собой INSERT, UPDATE или DELETE, то это оператор DML
    и результат функции getUpdateCount() актуально, в противном случае
    выходные данные getUpdateCount() не имеют значения.
Некрасиво и подвержено ошибкам. Но единственное возможное решение, которое вышло из этого ТАК-вопроса. :-(

Подробнее здесь: https://stackoverflow.com/questions/175 ... -execution
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «JAVA»