powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / как выполнить SQL скрипт?
10 сообщений из 10, страница 1 из 1
как выполнить SQL скрипт?
    #32947202
КАМАЗ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Надо выполнить SQL скрипт используя JDBC. Не хотелось бы самому анализировать файл и выполнять по одной SQL команде. Можно ли сделать это как-то проще (из явы естественно).
...
Рейтинг: 0 / 0
как выполнить SQL скрипт?
    #32947267
ponomarevvb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Например, можно прочитать файл построчно, и на каждой строке делать addBatch(sql) у своего Statement'a, а потом выполнить executeBatch() у того же Statement'а.
А анализировать - зачем? Или заранее неизвестно, что скрипт рабочий?
--С уважением, ponomarevvb--
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
как выполнить SQL скрипт?
    #38854912
Фотография May12
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не стала открывать новую тему, может в этой помогут.
Мне также необходимо выполнить большой и не понятный (сложный) 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
как выполнить SQL скрипт?
    #38854943
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
May12,

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

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

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

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

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

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

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

May12Просто выводит в консоль
Код: plaintext
Выполняем запрос
никакой информации об ошибка в консоль не выводиться. завершает работу без ошибок (или не выводит их) =((
P.s Добавила в вызов cmd "-P", "****",. Ну это конечно не помогло
Надо вычитывать либо редиректить Error Output. Вдруг там чего написано.
...
Рейтинг: 0 / 0
как выполнить SQL скрипт?
    #38854992
Фотография May12
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторинструкции типа GO
ага... есть.
авторНадо вычитывать либо редиректить Error Output.
А как? =)
...
Рейтинг: 0 / 0
как выполнить SQL скрипт?
    #38854996
Фотография May12
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
автортам больше одного запроса либо не SQL инструкции типа GO,
Там такая простыня (большая процедура). Go и SET поудаляла, но все равно не работает.
...
Рейтинг: 0 / 0
как выполнить SQL скрипт?
    #38855007
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
как выполнить SQL скрипт?
    #38855009
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
May12автортам больше одного запроса либо не SQL инструкции типа GO,
Там такая простыня (большая процедура). Go и SET поудаляла, но все равно не работает.
SET это расширение SQL. GO это вообще не SQL.
...
Рейтинг: 0 / 0
10 сообщений из 10, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / как выполнить SQL скрипт?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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