【问题标题】:Java import mysql database /bin/bash errorJava导入mysql数据库/bin/bash错误
【发布时间】:2011-10-20 10:12:16
【问题描述】:

我想使用带有 java 的 .sql 文件创建数据库导入,然后我找到了类似这样的代码

Runtime rt = Runtime.getRuntime();
Process pr = rt.exec(new String[]{"/bin/bash","-c","mysql -p -h localhost test < "+fileName.toString()});

我正在使用 netbean 来运行我的桌面应用程序。然后我收到此错误消息

java.io.IOException: Cannot run program "/bin/bash": CreateProcess error=2, The system cannot find the file specified

我的问题是在哪里可以找到 /bin/bash 路径?或者我该怎么办... 我应该配置环境变量路径之类的东西吗?

我在 Windows 上运行它

解决方案是用 cmd.exe 和 -c 替换 /bin/bash 到 /c,但是当我执行程序时,我的控制台上出现了这条消息

'mysql' 未被识别为内部或外部命令, 可运行的程序或批处理文件。

虽然我已经在 Windows 的 PATH 环境变量中设置了 mysql 目录

【问题讨论】:

  • 这是在 Linux 上吗?您可以在 Java 之外的终端/控制台中运行 /bin/bash 吗?
  • 您正在尝试在 Windows 上运行 /bin/bash?
  • 我在 windows @Philipp:我在 windows 上键入 cmd '/bin/bash/' 未被识别为内部或外部命令,
  • @Angga Saputra 答案很简单。“在 Windows 命令提示符中运行进程的方式,在 exec() 方法中使用相同的方式”

标签: java mysql database bash bin


【解决方案1】:

/bin/bash 在 Windows 上不存在。尝试将/bin/bash 替换为cmd.exe,并将开关-c 替换为/c。

编辑:如果您的 Java 程序看起来成功完成但没有写入数据,那么您的 Java 程序很可能没有等待 mysql 进程完成。尝试添加pr.waitFor();。

或者,mysql 可能会报告错误消息或将某些内容写入其标准输出或标准错误流。如果是这种情况,您需要:

  1. 读取有问题的流,或
  2. 如果您确定可以忽略它,请将违规流重定向到 NUL。

您可以通过在命令行中添加&gt;NUL 将标准输出重定向到NUL,并通过添加2&gt;NUL 将标准错误重定向到NUL。

我不建议丢弃输出/错误消息。如果有错误,你怎么知道?但是,很难正确处理使用Runtime.getRuntime().exec(...) 生成的进程的标准输出和标准错误流。相反,我会使用ProcessBuilder。 ProcessBuilder 允许您将mysql 进程的标准错误重定向到标准输出,这使得从两个流中读取输出更容易一些(您不需要两个单独的线程)。

ProcessBuilder builder = new ProcessBuilder("cmd.exe", "/c", "mysql -p -h localhost test < "+fileName.toString());
builder.redirectErrorStream(true);
Process pr = builder.start();

// Get mysql process's standard output/error.
InputStream is = pr.getInputStream();

// Now read from it and write it to standard output.
BufferedReader reader = new BufferedReader(new InputStreamReader(is));
String line = reader.readLine();
while (line != null) {
    System.out.println(line);
    line = reader.readLine();
}

【讨论】:

  • 哇非常感谢@Luke 它现在可以工作了,但是我的数据库没有成功导入..当我在命令提示符下尝试“mysql -p -h localhost test
  • @AnggaSaputra:“未成功导入”是什么意思?您收到错误消息吗?您的 Java 程序是否挂起?您的程序是否看似成功完成,但您的数据库中没有数据?
  • 我的错......我的意思是它确实完成了但我的数据库中没有数据......它仍然是空的
  • 我尝试用“dir”替换 pr.exec 命令,然后它打印我当前的 dir 程序...然后我只用“mysql”替换命令并且不显示任何内容..
  • 感谢卢克,我一直在使用 pr.getErrorStream() 打印错误消息,现在问题是 mysql 命令未被我的 cmd.exe 检测为命令,你知道这是为什么发生?虽然我已经在我的环境变量 PATH 上设置了
猜你喜欢
  • 2017-06-03
  • 1970-01-01
  • 1970-01-01
  • 2023-03-16
  • 2016-11-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多