Я хочу выполнить некоторые сценарии sql, используя Java-метод Runtime.exec. Я намереваюсь вызвать mysql.exe / mysql.sh и перенаправить файл сценария к этому процессу.
Из командной строки я могу запустить команду
<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 для получения ошибок и выходных потоков. Нет проблем там. Проблема заключается в чтении файла "scripts \ create_tables.sql" с использованием BufferedReader и передаче содержимого в выходной поток 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, и нет других ошибок или выходных данных.