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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Выполнить *.sql файл, JDBC 
:(
    Опции темы
DEER
Дата 4.2.2008, 16:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 749
Регистрация: 12.4.2005
Где: г. Рязань

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



Добрый день.
Такой вроде простенький вопрос, но ответа что то не могу придумать или найти.
Есть файл на диске. В нем запросы на обновление DB
Можно ли как-то выполнить его не прибегая к командной строке?

Раньше просто брал из файла строки, разбивал их на отдельные команды и выполнял по очереди.
Сейчас возникла необходимость включать в эти файлы изменённые хранимые процедуры. 
Почему то executeUpdate() не выполняет такие операции - ругается на символы $ в теле процедуры.
 
Заранее тхенкс


--------------------
 
PM MAIL WWW ICQ MSN   Вверх
serger
Дата 4.2.2008, 16:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата

Можно ли как-то выполнить его не прибегая к командной строке?

Почему то executeUpdate() не выполняет такие операции - ругается на символы $ в теле процедуры.


А в чём собстно проблема?
Возможно что-то с кодировками - выведите строку в запросах.


--------------------
упс!
PM MAIL WWW Skype GTalk Jabber   Вверх
DEER
Дата 4.2.2008, 16:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 749
Регистрация: 12.4.2005
Где: г. Рязань

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



Цитата(serger @ 4.2.2008,  16:32)
А в чём собстно проблема?

Есть файл
Цитата

CREATE OR REPLACE FUNCTION foo(int8) RETURNS int8 AS $BODY$ DECLARE    arg ALIAS FOR $1; BEGIN RETURN arg; END; $BODY$ LANGUAGE 'plpgsql' VOLATILE;

в одну строку занес, чтобы не заморачиваться с парсом файла.
Выполнял это запрос в редакторе. Всё создается, обновляется.

Выполняем код
Код

while((tmp=reader.readLine()) != null)
{
       tmp = tmp.trim();
       commands.add(tmp);
}
           String command = "";
            con = getConnection();
            Statement stmt = con.createStatement();
            for(Iterator it = commands.iterator(); it.hasNext();)
            {
                command = it.next().toString();
                stmt.addBatch(command); //Вот тут добавляется команда. я проверял там лежит именно мой запрос.
            }
            stmt.executeBatch();


При executeBatch(); вылетает экзепшн 
Цитата

Batch entry 0 CREATE OR REPLACE FUNCTION foo(int8) RETURNS int8 AS $BODY$ DECLARE    arg ALIAS FOR $1; BEGIN RETURN arg; END; $BODY$ LANGUAGE 'plpgsql' VOLATILE was aborted.  Call getNextException to see the cause.

делаем
Код

ex.getNextException()

получаем
Цитата

org.postgresql.util.PSQLException: ERROR: unterminated dollar-quoted string at or near "$BODY$ DECLARE    arg ALIAS FOR $1"

то есть ругается на символ доллара....


--------------------
 
PM MAIL WWW ICQ MSN   Вверх
serger
Дата 5.2.2008, 07:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата

Выполнял это запрос в редакторе. Всё создается, обновляется.


В каком редакторе?
Меня интересовала в чём проблема при использовании консольной программы, и почему обязательно надо писать выполнение запроса в коде.

Конкретно по запросу и ошибке не скажу - не использовал эту СУБД. Но что-то мне грит, что ваш запрос не воспринемается как единый.



--------------------
упс!
PM MAIL WWW Skype GTalk Jabber   Вверх
powerOn
Дата 5.2.2008, 09:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


software saboteur
****


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

Репутация: 47
Всего: 159



Цитата(DEER @  4.2.2008,  16:58 Найти цитируемый пост)
то есть ругается на символ доллара....

ну так он говорит, что не хватает завершающего символа $, а не то что его нельзя использовать.
возможно, тут причина:

Цитата(DEER @  4.2.2008,  16:58 Найти цитируемый пост)
Batch entry 0 CREATE OR REPLACE FUNCTION foo(int8) RETURNS int8 AS $BODY$ DECLARE    arg ALIAS FOR $1; BEGIN RETURN arg; END; $BODY$ LANGUAGE 'plpgsql' VOLATILE was aborted.  Call getNextException to see the cause.


Хотя, честно говоря, я просто ткнул пальцем в небо.  smile



--------------------
user posted image нет времени думать - нужно писать КОД!

PM MAIL   Вверх
DEER
Дата 5.2.2008, 11:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 749
Регистрация: 12.4.2005
Где: г. Рязань

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



Цитата(powerOn @ 5.2.2008,  09:01)
Хотя, честно говоря, я просто ткнул пальцем в небо.  smile

и не попал :-(
Цитата

4.2.2. Positional Parameters
A positional parameter reference is used to indicate a value that is supplied externally to an SQL statement. Parameters are used in SQL function definitions and in prepared queries. Some client libraries also support specifying data values separately from the SQL command string, in which case parameters are used to refer to the out-of-line data values. The form of a parameter reference is: 

$number

For example, consider the definition of a function, dept, as 

CREATE FUNCTION dept(text) RETURNS dept
    AS $$ SELECT * FROM dept WHERE name = $1 $$
    LANGUAGE SQL;
Here the $1 references the value of the first function argument whenever the function is invoked

это стандартный символ для языка...
Цитата(serger @ 5.2.2008, 07:02)
В каком редакторе?
Меня интересовала в чём проблема при использовании консольной программы, и почему обязательно надо писать выполнение запроса в коде.

Редактор запросов, поставляется с этой СУБД (Postgree)
Почему не хочу использовать комндную строку? Так я ж не знаю где будет установлена програма на сервере, соотвтственно правильно вызвать команду проблематично...

Это сообщение отредактировал(а) DEER - 5.2.2008, 11:41


--------------------
 
PM MAIL WWW ICQ MSN   Вверх
serger
Дата 5.2.2008, 12:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Каждый из операторов, разделённых ";" мож попробовать в отдельный batch перенести?


--------------------
упс!
PM MAIL WWW Skype GTalk Jabber   Вверх
DEER
Дата 5.2.2008, 13:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 749
Регистрация: 12.4.2005
Где: г. Рязань

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



Да пробовал. Тогда ругается на незавершенность операции.

Вообще я спросил конкретный вопрос. Он не в том, что я не могу создать функцию посредством java. А в том, что можно ли сэмитировать работу комадны Postgres'а psql -f filename  smile 


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

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

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


 




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


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

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