1

我正在将 Java 和 Mysql 用于程序,我正在使用脚本文件来恢复数据库。

在Java下我正在执行一个命令:在bin下:mysql -u root -proot test< c:\test.mysql

它没有运行,如果我在 cmd 行下运行它,它将正确执行并恢复数据库。

有谁知道..为什么会发生..有什么问题,如果我在Java环境下运行它为什么不运行。

确切语法:我正在使用进程 P= runtime.getRunTime().exec(FilePath)

其中 FilePath 变量具有值:mysql -u root -proot test< c:\test.mysql

我正在使用 Windows 环境。而如果我在 CmdLine 中运行 FilePath,它将给出完美的结果。

非常感谢或帮助。

4

2 回答 2

2

我有同样的问题!

实际上,我唯一可以做的事情(在 Windows 上,还没有测试过其他平台)是使用批处理文件:

这是代码:

public class MysqlDatabase {

private int BUFFER = 10485760;
private String host, port, user, password, db;

public MysqlDatabase(String host, String port, String user, String password, String db) {
    this.host = host;
    this.port = port;
    this.user = user;
    this.password = password;
    this.db = db;
}

public boolean restoreDatabase(String filepath) throws Exception {
    String comando = "mysql " + db + " --host=" + host + " --port=" + port
            + " --user=" + user + " --password=" + password
            + " < " + filepath;
    File f = new File("restore.bat");
    FileOutputStream fos = new FileOutputStream(f);
    fos.write(comando.getBytes());
    fos.close();
    Process run = Runtime.getRuntime().exec("cmd /C start restore.bat ");
    return true;

}

public String getFull() throws Exception {

    Process run = Runtime.getRuntime().exec(
            "mysqldump --host=" + host + " --port=" + port
            + " --user=" + user + " --password=" + password
            + " --opt "
            + "" + db);
    InputStream in = run.getInputStream();
    BufferedReader br = new BufferedReader(new InputStreamReader(in));

    StringBuilder temp = new StringBuilder();

    int count;
    char[] cbuf = new char[BUFFER];

    while ((count = br.read(cbuf, 0, BUFFER)) != -1) {
        temp.append(cbuf, 0, count);
    }

    br.close();
    in.close();

    return temp.toString();
}}
于 2010-11-23T09:26:08.280 回答
0

我认为我们需要更多信息。只要路径设置相同,如果它将从命令行运行,它应该从 Runtime.exec() 运行相同。你看到什么错误?

尝试在脚本中设置推荐,以便您可以将路径和命令输出回显到文件中以供稍后查看。在 UNIX 中看起来像

 LOGFILE=my.log
 echo $PATH > $LOGFILE
 env >> $LOGFILE
 mysql -u root -proot test< c:\test.mysql >> $LOGFILE 2>&1

看起来您使用的是 Windows,所以我不知道如何以这种方式设置命令文件;重要的是确保您将 mysql 推荐的错误输出发送到文件。

于 2009-05-16T14:35:18.013 回答