Я хочу выполнить несколько SQL скриптов с использованием метода Runtime.exec в Java. Я намерен вызвать mysql.exe/mysql.sh и перенаправить файл сценария в этот процесс. Из командной строки можно запустить командукак перенаправить стандартный ввод в Java Runtime.exec?
<mysqInstallDir\/bin\mysql.exe -u <userName> -p <password> < scripts\create_tables.sql
Я могу вызвать mysql.exe с помощью Runtime.exec но как перенаправить данные из SQL файла в mysql.exe?
Я прочитал статью в http://www.javaworld.com/javaworld/jw-12-2000/jw-1229-traps.html?page=4 и используется механизм StreamGobbler для получения ошибок и выходных потоков. Нет проблем. Проблема возникает при чтении файла «сценариев \ create_tables.sql» с помощью BufferedReader и передавая содержимое OutputStream prcess в. Я ожидал, что процесс передаст данные в mysql.exe. Но я вижу, что из этого файла sql считывается только первая строка.
OutputStream outputstream = proc.getOutputStream();
OutputStreamWriter outputstreamwriter = new OutputStreamWriter(outputstream);
BufferedWriter bufferedwriter = new BufferedWriter(outputstreamwriter);
while ((line = br.readLine()) != null)
{
bufferedwriter.write(line);
bufferedwriter.flush();
System.out.println(line);
}
bufferedwriter.flush();
bufferedwriter.close();
proc.waitFor()
Когда я это делаю, я вижу, что выполняется только первая строка в create_tables.sql. Код выхода для процесса равен 0, и нет другой ошибки или вывода.
и поток ошибок, конечно. Или объедините выходные данные и потоки ошибок с помощью метода redirectErrorStream (boolean) ProcessBuilder и прочитайте объединенные потоки. –