2012-08-31 2 views
3

내 Java 코드를 사용하여 MySQL 데이터베이스를 내보내려고합니다. 그러나 나는 할 길은 찾지 못했습니다. 내가하고 싶은 일은 "내보내기 데이터베이스"로 응용 프로그램에 버튼이 있습니다. 해당 버튼을 클릭하면 내 데이터베이스를 지정된 경로로 내 보내야합니다. 다음 코드를 사용했지만 작동하지 않습니다.내 Java 코드를 통해 데이터베이스 내보내기

Runtime runtime = Runtime.getRuntime(); 
runtime.exec("C:\\Program Files\\MySql\\MySql Server 5.5\\bin\\mysqldump -u root -p myDatabase> D:\\backup.sql"); 

이 작업을 어떻게 수행해야합니까? 감사.

답변

4

두 가지 문제 :

  • -p 암호

이 선호하는 실행 파일의 경로 내부의 공간 사이의 공간 :

runtime.exec(new String[]{"C:\\Program Files\\MySql\\MySql Server 5.5\\bin\\mysqldump", "-u", "root", "-pmyDatabase" "> D:\\backup.sql"}); 

주를이 runtime.exec에 문제가있는 경우, 당신은 당신이 얻을 수있는 스트림을 봐야한다. 네이드 Process. 오류가 발생한 경우 해당 스트림을 보지 않는 것은 예외가 발생했을 때 예외를 보지 않는 것과 같습니다.

+0

내 서블릿에서이를 수행하는 방법은 무엇입니까? mysqldump 이전의 경로를 제거하고이 동일한 코드를 사용하겠습니까? – user2473779

2

백업 :

/******************************************************/ 
//Database Properties 
/******************************************************/ 
String dbName = “dbName”; 
String dbUser = “dbUser”; 
String dbPass = “dbPass”; 

/***********************************************************/ 
// Execute Shell Command 
/***********************************************************/ 
String executeCmd = “”; 
executeCmd = “mysqldump -u “+dbUser+” -p”+dbPass+” “+dbName+” -r backup.sql”; 
} 
Process runtimeProcess =Runtime.getRuntime().exec(executeCmd); 
int processComplete = runtimeProcess.waitFor(); 
if(processComplete == 0){ 

out.println(“Backup taken successfully”); 

} else { 

out.println(“Could not take mysql backup”); 

} 

복원 :

/******************************************************/ 
//Database Properties 
/******************************************************/ 
String dbName = “dbName”; 
String dbUser = “dbUser”; 
String dbPass = “dbPass”; 

/***********************************************************/ 
// Execute Shell Command 
/***********************************************************/ 
String executeCmd = “”; 

executeCmd = new String[]{“/bin/sh”, “-c”, “mysql -u” + dbUser+ ” -p”+dbPass+” ” + dbName+ ” < backup.sql” }; 

} 
Process runtimeProcess =Runtime.getRuntime().exec(executeCmd); 
int processComplete = runtimeProcess.waitFor(); 
if(processComplete == 0){ 

out.println(“success”); 

} else { 

out.println(“restore failure”); 

} 
+0

어떤 종류의 오류가 발생합니까? – Heidarzadeh

+0

int processComplete = runtimeProcess.waitFor(); iam은 항상 processComplonly를 1로만 사용합니다 ... "지정된 backup.sql cant find"로 예외가 발생했습니다. –

+0

전체 스택 추적이 필요합니다. 당신은 pastebin.com에 그것을 붙여 넣을 수 있고 여기에 링크에 주석을 달거나 stackoverflow에 새로운 질문을하고 나에게 링크를 줄 수있다. – Heidarzadeh

1

이 작업을 시도 할 수 있습니다.

public void actionPerformed(ActionEvent evt) 
    { 
    private String m_MySqlPath=""; 
    ResultSet res=null; 
    res = DBHandler.getInstance().executeQuery("select @@basedir",null); 

      while(res.next()) 
      { 
       m_MySqlPath=res.getString(1) ; 
      } 



      m_MySqlPath = m_MySqlPath.replace("\\Data\\", "\\bin\\"); 

    if (exportDB.isSelected() 
    {  
    try { 

      String executeCmd = m_MySqlPath + "\\mysqldump -u " + DB_USER 
      +" -p" + DB_PASSWORD + " " + DB_NAME + " -r " + "\""+FilePath + "\\" 
      + FileName+"\""; 

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

     BufferedReader r=new BufferedReader(new InputStreamReader(runtimeProcess.getInputStream())); 
     String s; 
     while((s=r.readLine())!=null) 
     { 
      System.out.println(s); 
     } 

     return true; 

    } 
    catch (final Exception ex) { 
     ex.printstackTrace(); 
     return false; 
    } 
} 
관련 문제