Модераторы: LSD, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> JDBC 
:(
    Опции темы
akula84
Дата 10.11.2004, 18:48 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Вопрос возник такой.
Допустим я хочу при помощи JDBC послать к БД запрос.
Запрос состоит из нескольких строк(то есть вроде надо использовать addBatch()).
Но результатом запрос является некоторая выборка из нескольких таблиц(то есть нужен ResultSet)
Можно как-нибудь связать эти две вещи?

Заранее спасибо за помощь.
Если что не понятно, объясню
  Вверх
Domestic Cat
Дата 10.11.2004, 19:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5452
Регистрация: 3.5.2004
Где: Dallas, US

Репутация: 50
Всего: 172



Не совсем понял smile
Добавляшь квери чeрез addBatch, делаешь execute, а затем получаешь ResultSet : ResultSet result = statement.getResultSet();


--------------------

PM   Вверх
akula84
Дата 10.11.2004, 19:34 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Результатом Batch() не может быть ResultSet...
А есть вариант как это можно обойти?
  Вверх
Domestic Cat
Дата 10.11.2004, 19:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5452
Регистрация: 3.5.2004
Где: Dallas, US

Репутация: 50
Всего: 172



Но если не может, то откуда ты хочешь взять ResultSet? Да и методa Batch() нету.

Это сообщение отредактировал(а) Domestic Cat - 10.11.2004, 19:54


--------------------

PM   Вверх
akula84
Дата 10.11.2004, 19:56 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











А какое ест вообще решение такой задачи:
Есть у нас файлик,содержащий запрос к sql серверу. Запрос состоит из нескольких последовательных операций, в результате чего получаем некий набор необходимых нам строк.
Как лучше всего получить эти строки.
Не будем же мы каждую строчку отдельно выполнять? или другого выхода нет?

Надеюсь удалось объяснить проблемку smile

  Вверх
Domestic Cat
Дата 10.11.2004, 20:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5452
Регистрация: 3.5.2004
Где: Dallas, US

Репутация: 50
Всего: 172



Вообще-то в апи у каждого batch-метода подписано:

Цитата
NOTE: This method is optional



Кромe того, чем тебe нe подходит statement.getResultSet() после выполнения statement.executeBatch() ?


--------------------

PM   Вверх
akula84
Дата 11.11.2004, 10:41 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Ошибку выдает следующую

java.sql.BatchUpdateException: [TDS Driver]Invalid Batch SQL Expression. A ResultSet was produced.
  Вверх
Zandr
Дата 11.11.2004, 13:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 433
Регистрация: 16.7.2004
Где: Новосибирск

Репутация: 9
Всего: 13



Цитата
Я написал программку, которая должна печатать букву "ф", но она выдает ошибку "ArrayIndexOfBounds"... smile Блин, помогите, где у меня ошибка???


Я это к тому, что ты бы хоть привел список запросов, добавляемых в задание. А еще попробуй перед добалением запроса выводить его на консоль. И смотри какой запрос будет упрямиться.

Код

while (есть еще запросы) {
   прочитать запрос из файла (или откуда-то там)
   System.out.println( мой следующий запрос);
   Добавить в батч (мой запрос)
}


Есть мнение, что если ты добавляешь запросы в очередь - то вывод (ризалт сет) должен давать только последний.
PM MAIL   Вверх
Guest
Дата 11.11.2004, 13:32 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Вот код , выдаваемая ошибка написана выше
Код

   try{
     new com.inet.tds.TdsDriver();
     String ip = "xxx.xx.x.xx";
     String login = "xxxxxx";
     String password = "xxxxxx";
     String url = "jdbc:inetdae:" + ip + ":1433?sql7=true&charset=Cp1251";
     connection = DriverManager.getConnection(url, login, password);
     String dbname = "xxxxxx";
     connection.setCatalog(dbname);
     Statement st = connection.createStatement();
     //Запрос будет другой
     st.addBatch("set forceplan on");
     st.addBatch("select * from init_as");
     st.executeBatch();
     ResultSet rs = st.getResultSet();
     while (rs.next()) {
       for (int i = 1; i <= rs.getMetaData().getColumnCount(); i++) {
         System.out.println(rs.getObject(i));
       }
     }
     connection.close();
   }catch(Exception ex){System.out.println("mistake");ex.printStackTrace();}


  Вверх
igon
Дата 12.11.2004, 02:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 327
Регистрация: 30.10.2004

Репутация: 1
Всего: 21



Из документации:

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, что, собственно, уже прозвучало

Цитата
Результатом Batch() не может быть ResultSet...
А есть вариант как это можно обойти?


Так что не SELECT команды из файлика можно объединить в butch и выполнить, а потом выполнить ПО ОДНОЙ команды типа SELECT - все равно, насколько мне известно, нет метода, возвращающего массив ResultSet[]

Обходной путь:
Заставить БД выполнить хранимую процедуру (анонимный блок?), которой передать все команды типа SELECT. Хранимая должна записать результаты выполнения в промежуточную таблицу, которую и запросить потом на предмет получения некого набора необходимых нам строк, возможно, с последующим их парсингом.



--------------------
Хотите поговорить об этом?
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
javastic
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux, javastic.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0555 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.