【问题标题】:desktop application system where i wants to backup the data base我要备份数据库的桌面应用程序系统
【发布时间】:2017-03-01 10:06:00
【问题描述】:

我已经创建了一个桌面应用系统,我想在其中备份数据库。

我正在使用如下所示的代码:

 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

【问题讨论】:

  • 请阅读 Oracle 教程 EventDispatchThread,尤其是关于 SwingWorker 的部分,简短说明 ---> Swing API 的所有事件都必须在 EDT 上完成,并且您的代码在显示 JOptionPane 时存在问题
  • @mKorbel 你没有抓住重点。他不明白“完整”不是完整;但是执行该转储调用的返回代码...并且 != 0 意味着。转储失败。
  • @GhostCat 我只评论了 EDT,:-) 除了 MySQL 有相当/非常好的设计 JDBC API,那么也许没有理由使用(错误想法的解释)runtime.exec作为这里的答案

标签: java mysql swing runtime database-backups


【解决方案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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-01-06
    • 1970-01-01
    • 1970-01-01
    • 2012-04-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多