Мне нравится это:
Код: Выделить всё
boolean isResultSet = statement.execute(arbitrarySQLCommand);
- Это был оператор DML, но он не повлиял ни на какие строки. Затронутое ноль строк является допустимым ответом. Я просто имею в виду, что какое-то условие не было выполнено.
- Это был оператор не-DML (скорее всего, оператор DDL).. который по определению не меняет строки поэтому количество обновлений всегда равно нулю (ага!). Или, говоря иначе: концепция количества обновлений не имеет смысла для таких утверждений.
Меня не интересуют операторы, которые производят выходные данные, поэтому я мог бы также использовать 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