Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/63.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用java命令在mysql中恢复数据库_Java_Mysql - Fatal编程技术网

使用java命令在mysql中恢复数据库

使用java命令在mysql中恢复数据库,java,mysql,Java,Mysql,这是我使用java命令恢复mysql数据库的代码 当我调试代码时,它会卡在runtimeProcess.waitFor()上 有谁能为这个问题提供解决方案吗 public static boolean restoreDB(String dbUserName, String dbPassword,String dbName, String path) { String command ="mysql -u"+dbUserName+" -p"+dbPassword+" "+dbName+"

这是我使用java命令恢复mysql数据库的代码

当我调试代码时,它会卡在runtimeProcess.waitFor()上

有谁能为这个问题提供解决方案吗

public static boolean restoreDB(String dbUserName, String dbPassword,String dbName, String path) {

    String command ="mysql -u"+dbUserName+" -p"+dbPassword+" "+dbName+" < \""+path+"\"";

    Process runtimeProcess;
    try {

        runtimeProcess = Runtime.getRuntime().exec(command);
        int processComplete = runtimeProcess.waitFor();

        if (processComplete == 0) {
            System.out.println("Backup restored successfully");
            return true;
        } else {
            System.out.println("Could not restore the backup");
        }
    } catch (Exception ex) {
        ex.printStackTrace();
    }

    return false;
}
publicstaticbooleanrestoredb(stringdbusername、stringdbpassword、stringdbname、stringpath){
String command=“mysql-u”+dbUserName+“-p”+dbPassword+“”+dbName+“<\”“+path+”\”;
进程运行时进程;
试一试{
runtimeProcess=Runtime.getRuntime().exec(命令);
int processComplete=runtimeProcess.waitFor();
if(processComplete==0){
System.out.println(“备份已成功恢复”);
返回true;
}否则{
System.out.println(“无法恢复备份”);
}
}捕获(例外情况除外){
例如printStackTrace();
}
返回false;
}

进程可能阻塞等待输入,或者写入了太多输出,以至于填满了进程输出缓冲区,等待您读取输出。无论哪种方式,如果您确保打印出流程的stdout和stderr,您都可以获得更多信息:

private static class StreamReader implements Runnable {

    private InputStream stream;
    private volatile boolean finished = false;

    public StreamReader(InputStream stream) {
        this.stream = stream;
    }

    public void run() {
        Scanner scanner = new Scanner(stream);

        while(!finished) {
            System.out.println(scanner.nextLine());          
        }

    }

}

//...
runtimeProcess = Runtime.getRuntime().exec(command);
StreamReader stdoutReader = new StreamReader(runtimeProcess.getInputStream());
StreamReader stderrReader = new StreamReader(runtimeProcess.getErrorStream());
new Thread(stdoutReader).start();
new Thread(stderrReader).start();
int processComplete = -1;
try {
    processComplete = runtimeProcess.waitFor();
} finally {
    stdoutReader.finished = true;
    stderrReader.finished = true;
}

我终于找到了答案。。 谢谢大家的支持, 我看到他们中的很多人都有同样的问题,所以这是我给你们的解决方案

无法使用Runtime.getRuntime().exec()函数执行mysql还原命令

因此,我创建了一个批处理文件,并在其中添加了这个mysql恢复命令并执行了它

publicstaticvoidrestoredb(stringdbusername、stringdbpassword、stringdbname、stringpath){
试一试{
//对于linux,必须将.bat替换为.sh
String destpath=“D:\\backup\\db.bat”;
//创建批处理文件
PrintWriter=新的PrintWriter(destpath);
String command=“mysql-u”+dbUserName+“-p”+dbPassword+“”+dbName+“<\”“+path+”\”;
writer.println(命令);
writer.close();
//执行批处理文件
进程运行=Runtime.getRuntime().exec(destpath);
System.out.println(“创建的文件”);
int processComplete=run.waitFor();
if(processComplete==0){
System.out.println(“备份创建成功”);
//返回true;
}否则{
System.out.println(“无法创建备份”);
}
}捕获(例外情况除外)
{
例如printStackTrace();
}
}
您看过吗?
public static void restoreDB(String dbUserName, String dbPassword,String dbName, String path) {
    try{
        //for linux .bat must replaced with .sh
        String destpath = "D:\\backup\\db.bat";

    //creating batch file 
    PrintWriter writer = new PrintWriter(destpath);
    String command = "mysql -u"+dbUserName+" -p"+dbPassword+" "+dbName+" < \""+path+"\"";
    writer.println(command);
    writer.close();

    //executing batch file
    Process run = Runtime.getRuntime().exec(destpath);
    System.out.println("file created");
    int processComplete = run.waitFor();

        if (processComplete == 0) {
            System.out.println("Backup created successfully");
            //return true;
        } else {
            System.out.println("Could not create the backup");
        }
    }catch(Exception ex)
    {
        ex.printStackTrace();
    }

}