【问题标题】:Calling mysql.exe from Java从 Java 调用 mysql.exe
【发布时间】:2009-02-20 17:00:52
【问题描述】:

我正在从 Java 调用 mysql.exe 来加载数据库。因为进程只是挂起,我需要创建一个命令文件并传入用户名和密码。

command.bat 的示例内容:

mysql --user="%1" --password="%2" mydatabase < myscript.sql

问题是我看不到 mysql 命令的输出以查看是否有任何错误。它们显示在命令行上,但我似乎无法将它们捕获到用于解析的文件或 InputStream 中。

如何查看mysql命令的输出?

注意:直接从 Java 调用 mysql.exe 会挂起,因为 mysql 似乎没有将信息发送到缓冲区。

注意:我们使用 mysql.exe 而不是 JDBC,因为我们需要更新触发器之类的东西。为了将所有语句提交到数据库,我们需要解析所有命令并一次传递它们。

注意:这是一个正在运行的 MySQL 数据库,需要升级。

【问题讨论】:

  • 您是否尝试查看错误流而不是输出流?
  • 试试-B切换到mysql.exe?
  • 看起来这家伙用 C# 做了同样的事情,所以它应该是可能的。 jdconley.com/blog/archive/2006/08/01/…如果您粘贴代码,我们可以查看您的订单是否错误。记得在调用 waitFor() 之前读取输出。
  • 我有一个 streamgobbler 可以将错误和输入流读取到字符串缓冲区中。它扩展了线程,因此它可以同时执行它们。
  • 你能发布一些代码吗?具体来说,我想看看你的流处理和 Runtime.exec() 调用。

标签: java mysql windows


【解决方案1】:

如果您仅从 Java 中访问此数据库,更好的解决方案是Connector/MXJ。这将允许您简单地进行格式良好的 JDBC 调用,并且该库将自动为您处理数据库启动。

基本上,jar 文件包含 mysql 服务器可执行文件的实例(或者,对于多个平台,实例)。它还包含一个框架,您可以在其中加载数据库的预填充数据。

第一次访问 JDBC 连接时,它将从 jar 中拉出正确的 mysql 服务器,并在当前目录中创建数据库(使用上面的预填充数据)。正如预期的那样,从那时起的任何更改都将持续存在。

这里有更多信息:

Launching via JDBC

Launching via a Java Object

【讨论】:

  • 他问的不是如何启动 MySQL 数据库,而是如何与正在运行的数据库交互。他不能使用 JDBC 的原因是因为他想导入一个使用 mysqldump 创建的 MySQL 脚本。
  • 这在原帖中并不清楚。我会在他发布相关代码时更新。
【解决方案2】:

不确定为什么您无法查看其输出。尝试将其输出到文件,然后同时使用 Java 从文件中读取。

我自己没试过。

【讨论】:

  • 下面只是做一个空文件:mysql --user="%1" --password="%2" mydatabase myout.log
【解决方案3】:

您应该查看Process Builder。它使您可以处理输入/输出和错误流。

【讨论】:

    【解决方案4】:

    问题是我看不到 mysql 命令的输出以查看是否有任何错误。 > 它们显示在命令行上,但我似乎无法将它们捕获到文件中以进行解析或 输入流。

    使用 2>你的文件名

    例如

    mysql --user="%1" --password="%2" mydatabase myoutput.txt

    应该捕获 STDERR(MySQL.exe 将其输出发送到此处)

    例如

    mysql --user="%1" --password="%2" mydatabase myoutput.txt 2>&1

    将在同一个文件 (=myoutput.txt) 中同时捕获 STDOUT 和 STDERR。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-08-06
      • 1970-01-01
      • 2019-12-18
      • 2019-12-13
      • 2011-04-08
      • 2011-10-22
      • 2016-10-12
      相关资源
      最近更新 更多