与此链接类似:“How to restore a MySQL database backup using Java”
我正在尝试通过运行时进程执行命令来使用mysql.exe恢复数据库。我已经尝试了几个命令,但我似乎无法使它工作。它们似乎都挂起并返回1的退出值。
这些是我尝试过的命令:
String executeCmd = mySQLDir+"\\bin\\mysql -u root --password= testdb < " + backupFile;
String[] executeCmd = new String[]{mySQLDir+"\\bin\\mysql", "-u", "root", "--password=", "testdb", " < " + backupFile};
String[] executeCmd = new String[]{mySQLDir+"\\bin\\mysql", "--user=root", "--password=" , "testdb -e", " source "+backupFile};
String executeCmd = mySQLDir+"\\bin\\mysql -u root --password= testdb -e source "+ backupFile;
我试图通过输入流输出在执行过程中发生的事情,这会发生打印出来(还有更多的文字,但前两行是这样的):
C:\xampp\mysql\bin\mysql Ver 15.1 Distrib 10.1.9-MariaDB, for Win32 (AMD64)
Copyright (c) 2000, 2015, Oracle, MariaDB Corporation Ab and others.
Usage: C:\xampp\mysql\bin\mysql [OPTIONS] [database]
所以从我的理解来看,它似乎没有通过java识别命令,但通过命令提示符执行它似乎工作。有什么想法吗?
编辑:用户提到该命令可能不正确,因此输出到第三个executeCommand:
C:\xampp\mysql\bin\mysql
--user=root
--password=
testdb -e
source C:\Users\AA\Documents\NetBeansProjects\TestProject\backup\testDBBackup69-03-2016%19-27-45.sql
我尝试在第二个命令中使用空格:
String[] executeCmd = new String[]{mySQLDir+"\\bin\\mysql", " -u ", "root", " --password=", " testdb ", "< " + backupFile};
导致使用system.print输出:
C:\xampp\mysql\bin\mysql -u root --password= test < C:\Users\AA\Documents\NetBeansProjects\TestProject\backup\testDBBackup69-03-2016%19-27-45.sql
我知道这个命令在cmd中肯定有效但在java中仍然不起作用
我已经解决了这个问题,答案如下。
答案 0 :(得分:0)
除非启动shell,否则无法获得重定向。 exe不会理解<
。
将"cmd", "/c"
放入String []数组的前面。
答案 1 :(得分:0)
我已经使用Process Builder类解决了这个问题。
示例代码:
String[] command = new String[]{mySQLDir+"\\bin\\mysql ", "-uroot", "--password=", "testdb"};
ProcessBuilder processBuilder = new ProcessBuilder(command);
processBuilder = new ProcessBuilder(Arrays.asList(command));
processBuilder.redirectError(Redirect.INHERIT);
processBuilder.redirectInput(Redirect.from(backupFile));
Process process = processBuilder.start();
process.waitFor();