我正在使用Java和Mysql作为程序,我正在使用脚本文件来恢复Databsae。
在Java下我正在执行一个命令:在bin下:mysql -u root -proot test< C:\ test.mysql
它没有运行而如果我在cmd行下运行它将正确执行并恢复数据库。
有谁知道..为什么会发生.. 问题是什么,如果我在Java环境下运行它,它为什么不运行。
精确语法: 我正在使用Process P = runtime.getRunTime()。exec(FilePath)
其中FilePath变量具有值:mysql -u root -proot test< c:\ test.mysql
我正在使用Windiws环境。如果我在CmdLine中运行FilePath,它将给出完美的结果。
非常感谢或帮助。
答案 0 :(得分: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();
}}
答案 1 :(得分: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的错误输出发送给文件。