2015-06-17 2 views
0

Я работал над простым проектом, который принимает запрос sql от пользователя и отображает результаты в JTable Я хочу определить, был ли введен оператор select или какой-либо другой DML/Заявление DDL было введено, поэтому я могу позвонить executeQuery() или executeUpdate() соответственно. Я думал о проверке запроса, если он начинается с выбора. Есть лучший способ сделать это. enter image description hereКак определить, какой тип sql-запроса вводится пользователем в java

+0

Предлагаю вам использовать 2 текстовые области для ввода команды SQL. один для команд DDL и другой для команд DML. – Blip

+0

@ ka4tik Я не думаю, что помимо поиска 'Select',' create' и т. Д. В запросе String вы можете найти запрос на запуск сообщения в БД, вы можете иметь два типа, например 'DDLType' и' DMLType', на основе выбора , у другого выпадающего списка могут быть подтипы типа «DDL -> Create, Drop и т. д.», дайте пользователю выбрать параметр в раскрывающемся списке, а затем постройте построитель запросов –

+0

Как уже упоминалось @Blip. Я бы предложил вам использовать один JTextField, откуда вы получаете текст и сопоставляете его с операторами DDL/DMK, а затем вызываете запрос соответственно. – mustangDC

ответ

2

Вместо того, чтобы пытаться решить, если вам нужно позвонить executeQuery или executeUpdate, вы можете просто использовать execute вместо этого.

Javadoc из Statement.execute(String) говорит:

Выполняет заданную инструкцию SQL, которая может возвращать несколько результатов. В некоторых (необычных) ситуациях один оператор SQL может возвращать несколько наборов результатов и/или количество обновлений. Обычно вы можете игнорировать это, если вы не выполните (1) выполнение хранимой процедуры, которая, как вы знаете, может возвращать несколько результатов или (2), вы динамически выполняете неизвестную строку SQL.

(курсив мой)

The execute способами, имеют логическое значение, возвращаемое что означает:

  • false: первый результат является либо счетчика обновлений, или нет никаких результатов
  • true: первый результат - это набор результатов

Я намеренно говорю первый результат, поскольку JDBC допускает один оператор, имеющий несколько результатов (например, хранимая процедура SQL Server может возвращать несколько наборов результатов и количество обновлений в любом порядке).

Если false, вам необходимо позвонить по телефону getUpdateCount. Это либо возвращает счетчик обновлений (0 или выше), либо -1, чтобы указать, что результатов больше нет. В стороне: вызывая getUpdateCount, когда результат был true также должен был вернуть -1.

Если true, для получения результата необходимо позвонить по телефону getResultSet.

Чтобы обработать больше результатов (то есть, если вы либо просто обрабатывается результирующий набор или getUpdateCount не -1 был), то вы звоните getMoreResults, который также возвращает логическое значение, с точно такой же смысл, что и выше, и т.д.

Это звучит сложно, но большинство баз данных поддерживают только один набор результатов, и если вы заботитесь только о наборе результатов, вам нужно только проверить, возвращается ли executetrue, а затем использовать getResultset (или нет, если false).

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