我發現,如果不添加額外的工具和庫,可能無法做到。
我們可以通過將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驅動程序。
如果文件由單獨的較小的SQL命令組成,則應該一次讀入每條命令。理論上你可以加載一個15Mb的字符串,但你可能會用完內存。 –
你可以編寫一個後臺服務來使用'mysqlimport'命令一次加載文件,它將爲你分割並運行文件。 – halfer
@halfer感謝您的解決方案,但我不知道如何去做。我只是一個java編程的新手。如果你告訴我該怎麼做,我會很高興。 –