Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java: Общие вопросы > Запуск sql скрипта из файла


Автор: yuliada 5.4.2009, 11:07
Нужно из java программы запускать скрипт из файла с дампом базы для PostgreSQL, который очень большой. Парсить его наверно нежелательно. Как это лучше сделать? Из коммандной строки нужно коннектиться к psql терминалу и потом в нем запускать этот скрипт. Можно ли как-то программно это все сделать?

Автор: Platon 5.4.2009, 11:50
yuliada, консольного ввода/вывода, думаю, хватит.
Через программу запускаете консольного клиента PostgreSQL и в нем работаете так же, как если бы вы работали с консолью с клавиатуры.

Добавлено @ 11:54
более того, возможно, PostgreSQL может принимать в качестве аргументов определенные команды с параметрами.

Автор: tux 5.4.2009, 13:39
Вот эта софтина вроде бы умеет выполнять sql-скрипты прямо из Java-кода - http://scriptella.javaforge.com/.

Автор: tux 5.4.2009, 14:28
Еще в IBatis есть возможность выполнять скрипты - http://ibatis.apache.org/docs/java/user/com/ibatis/common/jdbc/ScriptRunner.html.

Автор: yuliada 5.4.2009, 23:50
А как можно запустить консольного клиента PostgreSQL через программу. Что-то типа вот этого?
Код

ProcessBuilder pb = new ProcessBuilder("C:/Program Files/PostgreSQL/8.3/bin/psql.exe", "-h", "host", "-U", "user", "-d", "database");

Как с ним общаться в этом случае? Через p.getInputStream(), p.getOutputStream()? Когда я пытаюсь что-то туда писать/читать он ни на что не реагирует. Или надо как-то по другому вообще?

Автор: v2v 6.4.2009, 00:21
Цитата(yuliada @  5.4.2009,  23:50 Найти цитируемый пост)
Как с ним общаться в этом случае? Через p.getInputStream(), p.getOutputStream()? Когда я пытаюсь что-то туда писать/читать он ни на что не реагирует. Или надо как-то по другому вообще? 

Для таких целей есть скриптовые языки аля Shell ( bat ). Пишешь батничек для винды который вызывает постгре с нужными параметрами, запускает какие то команды в нём и т.д. , а дальше вызываешь этот батничек в своей программе.
Это альтернативное - более простое решение, нежели взаимодействовать через ява программу.

Автор: yuliada 6.4.2009, 05:23
Оказалось что можно сделать проще, передать имя файла параметром:
Код

ProcessBuilder pb = new ProcessBuilder("C:/Program Files/PostgreSQL/8.3/bin/psql.exe", "-h", "host", "-U", "user", "-d", "database", "-f", "some.sql");
pb.start();


Sql команды можно выполнять так же, только с префиксом -c

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)