Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / как выполнить SQL скрипт? / 10 сообщений из 10, страница 1 из 1
04.03.2005, 18:08
    #32947202
КАМАЗ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как выполнить SQL скрипт?
Надо выполнить SQL скрипт используя JDBC. Не хотелось бы самому анализировать файл и выполнять по одной SQL команде. Можно ли сделать это как-то проще (из явы естественно).
...
Рейтинг: 0 / 0
04.03.2005, 18:56
    #32947267
ponomarevvb
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как выполнить SQL скрипт?
Например, можно прочитать файл построчно, и на каждой строке делать addBatch(sql) у своего Statement'a, а потом выполнить executeBatch() у того же Statement'а.
А анализировать - зачем? Или заранее неизвестно, что скрипт рабочий?
--С уважением, ponomarevvb--
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
15.01.2015, 10:41
    #38854912
May12
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как выполнить SQL скрипт?
Не стала открывать новую тему, может в этой помогут.
Мне также необходимо выполнить большой и не понятный (сложный) sql скрипт, который лежит в папке src\main\resources
Попробовала через iBatis ScriptRunner . Не получилось. Проблемы, судя по всему связаны, с разделителями.

Теперь пробую через Runtime.getRuntime().exec выполнить скрипт из файла.

Вот код:
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
public static void alterObj()
{

try {
    String line;
    LOG.info("Выполняем запрос");
    Process p = Runtime.getRuntime().exec(new String[] {"sqlcmd", "-U", "SA", "-d", "mayadb", "-S", "MSSQLSRV,1433", "-f", "C:/Users/MAYA/workspace/mayaproj/src/main/resources/alterOb.sql"});
       
    BufferedReader input = new BufferedReader (new InputStreamReader(p.getInputStream()));
    while ((line = input.readLine()) != null) {
    System.out.println(line);
    }
    input.close();
  }
  catch (Exception err) {
    err.printStackTrace();
  }
}



В результате в консоль выводится:
Код: plaintext
Выполняем запрос
В базе данных изменений, которые должны произойти, не происходит.
Вероятно, я косячу с набором параметров для массива:
Код: plaintext
new String[] {"sqlcmd", "-U", "SA", "-d", "mayadb", "-S", "MSSQLSRV,1433", "-f", "C:/Users/MAYA/workspace/mayaproj/src/main/resources/alterOb.sql"}
Помогите?
...
Рейтинг: 0 / 0
15.01.2015, 11:01
    #38854943
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как выполнить SQL скрипт?
May12,

ScriptRunner разделяет файл по точке с запятой и пытается выполнить каждый отдельный блок как запрос. С этим есть свои косяки. Но, в целом, кое-как работает.

По поводу запуска команд
- Не используйте Runtime.exec, используйте ProcessBuilder.
- Делайте redirect для Error Stream. Если процесс туда пишет, то вашей вычитки недостаточно. Таки поток заблокируется.
- Используйте ProcessBuilder.Redirect чтобы не мучатся с собственной вычиткой.
- Используйте AutoClosable\try with resource, если планируете закрывать потоки ввода\вывода

Не столько важен ваш код, как детальное описание вашего "не получилось". Как именно не работает? Зависает ли? Пишет ли чего?
...
Рейтинг: 0 / 0
15.01.2015, 11:29
    #38854987
May12
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как выполнить SQL скрипт?
авторScriptRunner разделяет файл по точке с запятой
Blazkowicz, в файле sql скрипта нет ни одной точки с запятой.
Еще немного поковырялась с iBatis, но тщетно.

автор как детальное описание вашего "не получилось"

Просто выводит в консоль
Код: plaintext
Выполняем запрос
никакой информации об ошибка в консоль не выводиться. завершает работу без ошибок (или не выводит их) =((

P.s Добавила в вызов cmd "-P", "****",. Ну это конечно не помогло
...
Рейтинг: 0 / 0
15.01.2015, 11:32
    #38854990
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как выполнить SQL скрипт?
May12Blazkowicz, в файле sql скрипта нет ни одной точки с запятой.

Тогда если там больше одного запроса либо не SQL инструкции типа GO, то работать не будет.

May12Просто выводит в консоль
Код: plaintext
Выполняем запрос
никакой информации об ошибка в консоль не выводиться. завершает работу без ошибок (или не выводит их) =((
P.s Добавила в вызов cmd "-P", "****",. Ну это конечно не помогло
Надо вычитывать либо редиректить Error Output. Вдруг там чего написано.
...
Рейтинг: 0 / 0
15.01.2015, 11:36
    #38854992
May12
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как выполнить SQL скрипт?
авторинструкции типа GO
ага... есть.
авторНадо вычитывать либо редиректить Error Output.
А как? =)
...
Рейтинг: 0 / 0
15.01.2015, 11:40
    #38854996
May12
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как выполнить SQL скрипт?
автортам больше одного запроса либо не SQL инструкции типа GO,
Там такая простыня (большая процедура). Go и SET поудаляла, но все равно не работает.
...
Рейтинг: 0 / 0
15.01.2015, 11:47
    #38855007
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как выполнить SQL скрипт?
May12авторинструкции типа GO
ага... есть.

Ну, тогда про JBDC/ScriptRunner можно забыть.

May12авторНадо вычитывать либо редиректить Error Output.
А как? =)
Так же как Output Stream, только в отдельном Thread. Но при наличии актуальной версии Java и ProcessBuilder писать свою вычитку это глупость.
Перепишите на ProcessBuilder
http://docs.oracle.com/javase/7/docs/api/java/lang/ProcessBuilder.html
Потом установите свойство redirectErrorStream
...
Рейтинг: 0 / 0
15.01.2015, 11:48
    #38855009
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как выполнить SQL скрипт?
May12автортам больше одного запроса либо не SQL инструкции типа GO,
Там такая простыня (большая процедура). Go и SET поудаляла, но все равно не работает.
SET это расширение SQL. GO это вообще не SQL.
...
Рейтинг: 0 / 0
Форумы / Java [игнор отключен] [закрыт для гостей] / как выполнить SQL скрипт? / 10 сообщений из 10, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]