use*_*227 5 java redirect stdin runtime.exec
我想使用Java的Runtime.exec方法执行一些sql脚本.我打算调用mysql.exe/mysql.sh并将脚本文件重定向到此进程.从命令提示符我可以运行该命令
<mysqInstallDir\/bin\mysql.exe -u <userName> -p <password> < scripts\create_tables.sql
Run Code Online (Sandbox Code Playgroud)
我可以使用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"并将内容传递给prcess的输出流.我期待Process将数据传递给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()
Run Code Online (Sandbox Code Playgroud)
当我这样做时,我看到只执行create_tables.sql中的第一行.进程的退出代码为0,并且没有其他错误或输出.
Exec向您返回一个Process对象.
Process有getInputStream和getOutputStream方法.
只需使用它们来获取输入流并开始将字节推入其中.不要忘记读取输出流或进程可能会阻塞.
| 归档时间: |
|
| 查看次数: |
9553 次 |
| 最近记录: |