2012-12-11 153 views
1

當前我正在將數據庫轉儲文件sample.sql導入到應用程序。由於數據庫包含相同的表和字段,我需要導入數據庫並追加到現有表。將MySQL導入到現有數據庫

我該如何解決這個問題?將導入的數據庫追加到現有數據庫的命令是什麼?

的代碼導入文件

try { 

    String[] command = new String[]{"\""+this.m_MySqlPath+"mysql\"", Constants.DB_NAME, "-u" + Constants.DB_USER, "-p" + Constants.DB_PASSWORD, "-e", " source "+"\""+FileName+"\"" }; 
    Process runtimeProcess = Runtime.getRuntime().exec(command, null, new File(this.m_MySqlPath)); 
    int processComplete = runtimeProcess.waitFor(); 

    if (processComplete == 0) 
    { 
     System.out.println("DatabaseManager.restore: Restore Successfull"); 
    } 
    else 
    { 
     System.out.println("DatabaseManager.restore: Restore Failure!"); 
    } 
+0

是否使用'mysqldump'創建了數據庫轉儲? –

+0

另外什麼是數據庫結構,它是否使用自動遞增的任何列可能與您導入的數據重疊? –

+0

表格包含自動增量。 – Gapchoos

回答

1

假設你的腳本是「myscript.sql」,其保存在「C:\」,那麼下面的命令可用於導入腳本,將數據庫

c:\Program Files\MySQL\MySQL Server 5.1\bin\mysql.exe --host=127.0.0.1 --user=root --password=root < c:/myscript.sql 

這個命令可以在Runtime.getRuntime().exec中使用。但是,當我嘗試有一些簡單的問題,它不能正常工作。所以我用另一種方法。

在此之前,我假設你的數據庫腳本比數據庫中包含更多的數據。所以,即使我刪除數據庫,然後使用數據庫腳本導入數據庫,我不會丟失任何數據。我只是刪除(刪除)當前數據庫並從數據庫腳本文件導入數據庫。

爲了解決上面提到的Runtime.getRuntime().exec,我創建了一個名爲「ba.bat」的批處理文件。並將該批處理文件作爲「c:\ bat.bat」存儲在c:驅動器中。該批處理文件的內容如下

%1\mysql.exe --host=%2 --user=%3 --password=%4 < c:/myscript.sql 
exit 

你可以用下面的語法調用給出ba.bat arg1 arg2 arg3 arg4

,其中Arg1 =路徑MySQL的bin文件夾例如= C:\ Program Files文件\的MySQL \ MySQL服務器5.1 \ BIN ARG2 = mysql的主機IP地址 ARG3 = MySQL用戶名 ARG4 = mysql的密碼

,最終java程序如下

import java.sql.*; 

public class NewClass { 

    public static void main(String[] args) { 
     Connection conn = null; 
     String mysqlPath="c:/Program Files/MySQL/MySQL Server 5.1/bin"; 
     String url = "jdbc:mysql://192.168.100.86/"; 
     String databaseIp="192.168.100.86"; 
     String dbName = "databasename"; 
     java.sql.Statement stmt = null; 
     String query = ""; 
     ResultSet result = null; 
     String driver = "com.mysql.jdbc.Driver"; 
     String userName = "root"; 
     String password = "root"; 
     try { 
      Class.forName(driver).newInstance();    
      conn = DriverManager.getConnection(url , userName, password); 
      stmt = conn.createStatement(); 
      result = null; 
      String test,input; 
      stmt.execute("drop database if exists "+dbName); 
      String fullPathWithArgs ="C:/ba.bat \""+mysqlPath+"\" "+databaseIp+" "+userName+" "+password+""; 
      Process runtimeProcess =Runtime.getRuntime().exec(fullPathWithArgs); 
      int processComplete = runtimeProcess.waitFor(); 
      if (processComplete == 0) 
         { 
          System.out.println("DatabaseManager.restore: Restore Successfull"); 
         } 
      else 
        { 
        System.out.println("DatabaseManager.restore: Restore Failure!"); 
        } 

      conn.close(); 
     } catch (Exception e) {   
      System.out.println("exception: " + e.getMessage()); 
     } 
    } 
} 
給出

在上面的java程序中,我正在刪除數據庫並從腳本導入數據庫。 您必須在您的腳本中使用CREATE DATABASE IF NOT EXISTS.From問題,我覺得這是你想要的。請讓我知道,如果有任何問題或以上不是你的預期答案。

還有一件事,如果你想將數據添加到現有的數據庫,那麼請從Java代碼刪除

stmt.execute("drop database if exists "+dbName); 

,也使所需的列在你的數據庫表中「獨一無二」即..創建唯一索引需要的表列

+1

@Gapchoos - 它有用嗎? –

+0

Rehman:這不是我想要做的。但是這仍然會產生輸出。我需要使用INFILE和LOAD OUTFILE分別導出每個表。 – Gapchoos