【发布时间】:2010-04-01 20:10:08
【问题描述】:
我想使用 Java 的 Runtime.exec 方法执行一些 sql 脚本。我打算调用 mysql.exe / mysql.sh 并将脚本文件重定向到这个进程。 从命令提示符我可以运行命令
<mysqInstallDir\/bin\mysql.exe -u <userName> -p <password> < scripts\create_tables.sql
我可以使用 Runtime.exec 调用 mysql.exe 但如何将数据从 sql 文件重定向到 mysql.exe ?
看了http://www.javaworld.com/javaworld/jw-12-2000/jw-1229-traps.html?page=4的文章,使用了StreamGobbler机制来获取错误和输出流。那里没问题。问题在于使用 BufferedReader 读取文件“scripts\create_tables.sql”并将内容传递给进程的输出流。我期待进程将数据传递给 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,其他无错误或输出。
【问题讨论】:
标签: java redirect stdin runtime.exec