2017-03-01 81 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 
相關問題