2017-01-20 42 views
1

我想在運行時從Java應用程序加載SQL文件(存儲在我的NetBeans Java項目的源文件夾中)到MySQL中。我怎樣才能做到這一點?如何從Java應用程序中將SQL文件(存儲在我的Java項目的源文件夾中)加載到MySQL中?

該SQL文件的大小爲15.15 MB,我想知道我是否可以複製到一個字符串?或者,如果我無論如何設法將它複製到一個字符串(儘管它可能會導致內存不足錯誤),如何一次執行多個命令(因爲SQL文件包含許多命令)。

我想不使用任何其他工具。只需使用java中預先存在的庫和類(與JDK捆綁在一起)即可。

+2

如果文件由單獨的較小的SQL命令組成,則應該一次讀入每條命令。理論上你可以加載一個15Mb的字符串,但你可能會用完內存。 –

+0

你可以編寫一個後臺服務來使用'mysqlimport'命令一次加載文件,它將爲你分割並運行文件。 – halfer

+0

@halfer感謝您的解決方案,但我不知道如何去做。我只是一個java編程的新手。如果你告訴我該怎麼做,我會很高興。 –

回答

0

我發現,如果不添加額外的工具和庫,可能無法做到。

我們可以通過將SQL文件分割成更小的SQL文件來實現,每個文件只包含一個SQL命令,然後啓動一個循環來一次執行所有這些文件。我曾試過它,它的工作原理。它當然會。

以下是我以前做的代碼:

import javax.swing.* ; 
import java.sql.* ; 
import java.io.* ; 

public class LoadSQLFile { 
    public static void main(string args[ ]) { 
     java.awt.EventQueue.invokeLater(new Runnable() { 
      public void run() { 
       try { 
        String password = JOptionPane.showInputDialog(null, "We need your MySQL Password to run the application. Please enter it here.", " MySQL Password ?", JOptionPane.QUESTION_MESSAGE) ; 
        Class.forName("java.sql.Driver") ; 
        Connection conn = DriverManager.getConnection("jdbc:mysql://localhost/MyDB", "root", password) ; 
        Statement stmt = conn.createStatement() ; 
        int i = 0 ; 
        for(i=1;i<=16;i++) { 
         FileReader fr = new FileReader("src//sql_files//BCK"+i+".sql") ; 
         BufferedReader br = new BufferedReader(fr) ; 
         stmt.execute(br.readLine()) ; 
        } 
        stmt.close(); 
        conn.close(); 
        JOptionPane.showMessageDialog(null, " Records Successfully Inserted into database !", "Success !", 1) ; 
       } catch(Exception e) { 
        JOptionPane.showMessageDialog(null, e, "ERROR", JOptionPane.ERROR_MESSAGE) ; 
       } 
      } 
     }); 
    } 
} 

我是來執行存儲在我的項目的源文件夾名爲「sql_files」包內SQL文件。這些文件的名稱是 - BCK1.sql,BCK2.sql,....,BCK16.sql。每個文件只在第一行包含一個SQL文件。它對我來說工作得很好。

我爲此使用了MySQL JDBC驅動程序。

0

我認爲ScriptUtils.executeSqlScript可以幫到你。

+0

不,但不確定。我認爲它不起作用,因爲它的連接無法加載到SQL項目的源文件夾中包含的MySQL的MySQL執行。 –

相關問題