天天看点

java 代码 还原,使用Java代码还原数据库-程序无响应

java 代码 还原,使用Java代码还原数据库-程序无响应

I'm trying to restore a backed up .sql file using Java program. I'm posting the method below. But when I execute this the program halts for a long time. Then I executed same mysql command in command line(Windows) it's works charmingly.

Puzzled where I missed. What do you think ?

File file;

final JFileChooser fc = new JFileChooser();

int returnVal = fc.showOpenDialog(this);

if (returnVal == JFileChooser.APPROVE_OPTION) {

file = fc.getSelectedFile();

try {

System.out.println(file.getCanonicalPath());

String executeCmd = "mysql -u " + username + " -p" + password +" " + dbName+" < "+" \" "+file.getCanonicalPath()+"\" " ;

Process runtimeProcess;

runtimeProcess = Runtime.getRuntime().exec(executeCmd);

int processComplete = runtimeProcess.waitFor();

if (processComplete == 0) {

JOptionPane.showMessageDialog(Interface.mainFrame, "Database Backup restored successfully.", "Netmetering", 1);

} else {

System.out.println("Could not restore the backup");

}

} catch (IOException | InterruptedException ex) {}

...

解决方案

String executeCmd = "mysql -u " + username + " -p" + password +" " + dbName+" < "+" \" "+file.getCanonicalPath()+"\" " ;

Process runtimeProcess = Runtime.getRuntime().exec(executeCmd);

InputStream is = runtimeProcess.getInputStream();

// Do one OR the other, but not both ;)

// If you don't care about the output, but I think it's a bit of waste personally...

while (is.read() != -1) {}

// I'd at least dump the output to the console...

int byteRead = -1;

while ((byteRead = is.read()) != -1) {

System.out.print((char)byteRead );

}

int processComplete = runtimeProcess.waitFor();

if (processComplete == 0) {...}

I would also recommend using ProcessBuilder over creating the Process manually like this, it handles the parameters better - IMHO