2017-10-21 16 views
1
import java.io.File; 
import java.text.SimpleDateFormat; 
import java.util.Date; 
import javax.swing.JFileChooser; 
import javax.swing.JOptionPane; 

public class Backup extends javax.swing.JFrame { 

    String path = null; 
    String filename; 

    public Backup() { 
     initComponents(); 

     setLocationRelativeTo(null); 
    } 

    private void jButton3ActionPerformed(java.awt.event.ActionEvent evt) { 
     JFileChooser fc = new JFileChooser(); 
     fc.showOpenDialog(this); 
     String date = new SimpleDateFormat("YYYY/MM/dd").format(new Date()); 
     try { 
      File f = fc.getSelectedFile(); 
      path = f.getAbsolutePath(); 
      path = path.replace("\\", "/"); 
      path = path + " _ " + date + ".sql"; 
      jTextField5.setText(path); 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } 

     Process p; 
     try { 
      Runtime runtime = Runtime.getRuntime(); 
      p = runtime.exec("C:/Program Files/MySQL/MySQL Server5.1/bin/mysqldump.exe -u root -p123 --add-drop-database -B tsms -r" + path); 
      int Processcomplete = p.waitFor(); 
      System.out.println(p); 
      System.out.println("" + Processcomplete); 
      if (Processcomplete == 0) { 
       JOptionPane.showMessageDialog(rootPane, "Database Backup Successfully"); 
      } else { 
       JOptionPane.showMessageDialog(rootPane, "Error"); 
      } 
      jTextField5.setText(null); 
      System.gc(); 
     } catch (Exception e) { 
      e.printStackTrace(); 
      System.gc(); 
     } 
    } 
} 

MySQL 서버 데이터베이스가있는 Java Swing 응용 프로그램을 개발 했으므로 버튼을 클릭하면 내 Java 스윙 응용 프로그램에서 백업 및 복원 옵션을 제공하려고합니다. 그것은 백업 데이터베이스를해야하고 데이터베이스이 내 백업 코드는 모든 가능성을 복원내 Java 데이터베이스 백업 코드의 오류

. 그러나이 코드를 항상 실행하면 (Processcomplete == 2)이 코드의 오류는 무엇입니까?

+3

사용'getErrorStream()'공정 –

답변

1

코드에 여러 가지 문제가 있습니다. 나는 그들 모두를 설명하려고 노력할 것이다. 그러나 첫 번째는 내가 / 같은 특수 문자를 포함 할 수 없습니다 오류 코드 2.

파일 이름을 반환 볼 수있는 가장 큰 실수입니다.

코드에서 볼 수있는 주요 문제 중 하나는 저장하려는 파일 이름입니다. Windows에서는 / 또는 \을 파일 이름으로 입력 할 수 없습니다. 따라서 YYYY/MM/DD을 파일 이름에 추가하는 것은 좋은 생각이 아닙니다. 같은 날 여러 백업을 얻으려고 할 때 날짜 만 추가하면 하루

가 하나 개의 백업 파일 동일한 파일이 대체됩니다 하루에 하나의 백업 파일을 만들 수 있습니다 . getTime()util.Date 개체를 사용하여 매 밀리 초 단위로 새로 고침되는 고유 번호를 가져옵니다.

이 부품을 교체하십시오.

try { 
    File f = fc.getSelectedFile(); 
    path = f.getAbsolutePath(); 
    path = path.replace("\\", "/"); 
    path = path + " _ " + new Date().getTime() + ".sql"; 
    jTextField5.setText(path); 
} catch (Exception e) { 
    e.printStackTrace(); 
} 

위에서 언급 한 두 가지 문제가 모두 해결되었습니다. mysqldump.exe의 절대 경로를주기

나쁜 생각

다른 컴퓨터에서이 변경 될 수 있으므로입니다. C:/Program Files/MySQL/MySQL Server5.1/bin/mysqldump.exe을 경로로 지정하고 대신 MySQL을 설치 한 후 환경 변수로 추가하고 mysqldump.exe을 사용하십시오.

p = runtime.exec("mysqldump.exe -u root -p123 --add-drop-database -B tsms -r" + path); 

파일 이름 부분이 문제였다, 지금은 작동합니다.

+0

파일 이름에서 오류를 읽을 수있는 문제였다. 엄지 위로! –