Java导入mysql数据库/bin/bash错误
我想在java中使用.sql文件创建数据库导入,然后我发现了类似这样的代码Java导入mysql数据库/bin/bash错误,java,mysql,database,bash,bin,Java,Mysql,Database,Bash,Bin,我想在java中使用.sql文件创建数据库导入,然后我发现了类似这样的代码 Runtime rt = Runtime.getRuntime(); Process pr = rt.exec(new String[]{"/bin/bash","-c","mysql -p -h localhost test < "+fileName.toString()}); 我的问题是在哪里可以找到/bin/bash路径?或者我该怎么做。。。 我应该配置像env variable path这样的东西吗 我在
Runtime rt = Runtime.getRuntime();
Process pr = rt.exec(new String[]{"/bin/bash","-c","mysql -p -h localhost test < "+fileName.toString()});
我的问题是在哪里可以找到/bin/bash路径?或者我该怎么做。。。
我应该配置像env variable path这样的东西吗
我在windows上运行这个
解决方案是将/bin/bash替换为cmd.exe和-c to/c,但当我执行程序时,控制台上会显示此消息
“mysql”未被识别为内部或外部命令,
可操作的程序或批处理文件
虽然我已经在Windows的PATH环境变量中设置了mysql目录,但Windows上不存在。尝试将
/bin/bash
替换为cmd.exe
,并将开关-c
替换为/c
编辑:如果您的Java程序似乎已成功完成,但尚未写入任何数据,则很可能您的Java程序没有等待mysql
过程完成。尝试添加pr.waitFor()代码>
或者,mysql
可以报告错误消息,或者向其标准输出或标准错误流写入内容。如果是这种情况,您需要:
读取有问题的流,或
如果您确定可以忽略它,请将有问题的流重定向到NUL
通过将>NUL
添加到命令行,可以将标准输出重定向到NUL
,并通过添加2>NUL
将标准错误重定向到NUL
我不建议丢弃输出/错误消息。如果有错误,你怎么知道?但是,很难正确处理使用Runtime.getRuntime().exec(…)
生成的进程的标准输出和标准错误流。相反,我会使用一个。ProcessBuilder允许您将mysql
进程的标准错误重定向到标准输出中,这使得从两个流读取输出变得更容易(您不需要两个单独的线程)
ProcessBuilder=newprocessbuilder(“cmd.exe”、“/c”、“mysql-p-h localhost test<”+fileName.toString());
builder.redirectErrorStream(true);
进程pr=builder.start();
//获取mysql进程的标准输出/错误。
InputStream is=pr.getInputStream();
//现在从中读取并将其写入标准输出。
BufferedReader reader=新的BufferedReader(新的InputStreamReader(is));
字符串行=reader.readLine();
while(行!=null){
系统输出打印项次(行);
line=reader.readLine();
}
/bin/bash
在Windows上不存在。尝试将/bin/bash
替换为cmd.exe
,并将开关-c
替换为/c
编辑:如果您的Java程序似乎已成功完成,但尚未写入任何数据,则很可能您的Java程序没有等待mysql
过程完成。尝试添加pr.waitFor()代码>
或者,mysql
可以报告错误消息,或者向其标准输出或标准错误流写入内容。如果是这种情况,您需要:
读取有问题的流,或
如果您确定可以忽略它,请将有问题的流重定向到NUL
通过将>NUL
添加到命令行,可以将标准输出重定向到NUL
,并通过添加2>NUL
将标准错误重定向到NUL
我不建议丢弃输出/错误消息。如果有错误,你怎么知道?但是,很难正确处理使用Runtime.getRuntime().exec(…)
生成的进程的标准输出和标准错误流。相反,我会使用一个。ProcessBuilder允许您将mysql
进程的标准错误重定向到标准输出中,这使得从两个流读取输出变得更容易(您不需要两个单独的线程)
ProcessBuilder=newprocessbuilder(“cmd.exe”、“/c”、“mysql-p-h localhost test<”+fileName.toString());
builder.redirectErrorStream(true);
进程pr=builder.start();
//获取mysql进程的标准输出/错误。
InputStream is=pr.getInputStream();
//现在从中读取并将其写入标准输出。
BufferedReader reader=新的BufferedReader(新的InputStreamReader(is));
字符串行=reader.readLine();
while(行!=null){
系统输出打印项次(行);
line=reader.readLine();
}
这在Linux上吗?你能在Java之外的终端/控制台上运行/bin/bash
吗?你试图在Windows上运行/bin/bash
?我在Windows上@Philipp:我在Windows上键入cmd时,“/bin/bash/”不被识别为内部或外部命令,@Angga Saputra回答很简单。。“在windows命令提示符下运行进程的方式,在exec()方法中使用相同的方式”在Linux上是这样的吗?你能在Java之外的终端/控制台上运行/bin/bash
吗?你试图在Windows上运行/bin/bash
?我在Windows上@Philipp:我在Windows上键入cmd时,“/bin/bash/”不被识别为内部或外部命令,@Angga Saputra回答很简单。。“按照在windows命令提示符下运行进程的方式,在exec()方法中使用相同的方法”wow great Thank@Luke它现在可以工作了,但是我的数据库没有成功导入..当我在命令提示符下尝试“mysql-p-h localhost testjava.io.IOException: Cannot run program "/bin/bash": CreateProcess error=2, The system cannot find the file specified