Java导入mysql数据库/bin/bash错误

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这样的东西吗 我在

我想在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这样的东西吗

我在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