| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Java: Общие вопросы > JDBC |
| Автор: akula84 10.11.2004, 18:48 |
| Вопрос возник такой. Допустим я хочу при помощи JDBC послать к БД запрос. Запрос состоит из нескольких строк(то есть вроде надо использовать addBatch()). Но результатом запрос является некоторая выборка из нескольких таблиц(то есть нужен ResultSet) Можно как-нибудь связать эти две вещи? Заранее спасибо за помощь. Если что не понятно, объясню |
| Автор: Domestic Cat 10.11.2004, 19:15 |
| Не совсем понял Добавляшь квери чeрез addBatch, делаешь execute, а затем получаешь ResultSet : ResultSet result = statement.getResultSet(); |
| Автор: akula84 10.11.2004, 19:34 |
| Результатом Batch() не может быть ResultSet... А есть вариант как это можно обойти? |
| Автор: Domestic Cat 10.11.2004, 19:53 |
| Но если не может, то откуда ты хочешь взять ResultSet? Да и методa Batch() нету. |
| Автор: akula84 10.11.2004, 19:56 |
| А какое ест вообще решение такой задачи: Есть у нас файлик,содержащий запрос к sql серверу. Запрос состоит из нескольких последовательных операций, в результате чего получаем некий набор необходимых нам строк. Как лучше всего получить эти строки. Не будем же мы каждую строчку отдельно выполнять? или другого выхода нет? Надеюсь удалось объяснить проблемку |
| Автор: Domestic Cat 10.11.2004, 20:10 | ||
Вообще-то в апи у каждого batch-метода подписано:
Кромe того, чем тебe нe подходит statement.getResultSet() после выполнения statement.executeBatch() ? |
| Автор: akula84 11.11.2004, 10:41 |
| Ошибку выдает следующую java.sql.BatchUpdateException: [TDS Driver]Invalid Batch SQL Expression. A ResultSet was produced. |
| Автор: Zandr 11.11.2004, 13:09 | ||||
Я это к тому, что ты бы хоть привел список запросов, добавляемых в задание. А еще попробуй перед добалением запроса выводить его на консоль. И смотри какой запрос будет упрямиться.
Есть мнение, что если ты добавляешь запросы в очередь - то вывод (ризалт сет) должен давать только последний. |
| Автор: Guest 11.11.2004, 13:32 | ||
Вот код , выдаваемая ошибка написана выше
|
| Автор: igon 12.11.2004, 02:40 | ||
| Из документации: executeBatch public int[] executeBatch() throws SQLException ... Throws BatchUpdateException ... if one of the commands sent to the database ... attempts to return a result set. т.е. в butch не должно быть команд, возвращающих ResultSet, в данном случае - типа SELECT, что, собственно, уже прозвучало
Так что не SELECT команды из файлика можно объединить в butch и выполнить, а потом выполнить ПО ОДНОЙ команды типа SELECT - все равно, насколько мне известно, нет метода, возвращающего массив ResultSet[] Обходной путь: Заставить БД выполнить хранимую процедуру (анонимный блок?), которой передать все команды типа SELECT. Хранимая должна записать результаты выполнения в промежуточную таблицу, которую и запросить потом на предмет получения некого набора необходимых нам строк, возможно, с последующим их парсингом. |