2017-03-01 55 views
0

我已经创建了一个桌面应用程序系统,我想要备份数据库。桌面应用程序系统,我想备份数据库

我使用的代码如下所示:

process p = null; 
p = runtime.exec("E:/xampp/mysql/bin/mysqldump -uroot --add-drop-database -B clinic_management -r "+path+".sql"); 

int processComplite = p.waitFor(); 

System.out.println("processComplite" + processComplite); 

if(processComplite==0) { 
     JOptionPane.showMessageDialog(null, "<html><center> backup complite<br> Check this folder<br>"+path+"</center><html>"); 
     jTextField1.setText(""); 
} else { 
     JOptionPane.showMessageDialog(null, " backup not complite"); 
} 

它的正常工作在某些系统中,但有时它显示

processComplite=1 
+0

请阅读甲骨文教程EventDispatchThread,epsecially部分约SwingWorker的,短的解释--->所有Swing APIs的事件必须在EDT上完成,并且您的代码在显示JOptionPane时出现问题 – mKorbel

+0

@mKorbel您错过了这一点。他不明白“complite”不是完整的;但是执行该转储调用的返回代码......并且!= 0意味着。转储失败。 – GhostCat

+0

@GhostCat我只评论EDT,:-)作为一边MySQL有相当/很好设计的JDBC API,那么也许没有理由使用(解释错误的想法)runtime.exec作为答案在这里 – mKorbel

回答

1

waitFor()见的Javadoc:

返回:此Process对象表示的子进程的退出值。按照惯例,值0表示正常终止。

换句话说:您的数据库操作失败。有两件事你可以做:

  • 检查mysqldump是否生成日志文件;并看看你是否能在那里找到任何东西
  • 截至目前,你完全是忽略任何输出,当进行该过程调用时,将写入stdout/stderr。

含义:你可以做这样的事情可以访问由msqldump编写的消息潜在

InputStream stdout = p.getInputStream(); 
InputStream stderr = p.getErrorStream(); 
int returnCode = p.waitFor(); 
if (returnCode == 0) { 
    ... give positive message 
} else { 
    read data from streams and display those 
相关问题