如何从Java应用程序将SQL文件(存储在我的Java项目的源文件夹中)加载到MySQL中?

如何从Java应用程序将SQL文件(存储在我的Java项目的源文件夹中)加载到MySQL中?,java,mysql,sql,jdbc,netbeans6.5,Java,Mysql,Sql,Jdbc,Netbeans6.5,我想在运行时将一个SQL文件(存储在NetBeans Java项目的源文件夹中)从Java应用程序加载到MySQL中。我该怎么做 SQL文件的大小是15.15 MB,我想知道是否可以复制到字符串中?或者,如果我设法将它复制到一个字符串(尽管它可能抛出内存不足错误),如何一次执行多个命令(因为SQL文件包含许多命令) 我想在不使用任何其他工具的情况下完成它。仅使用java中预先存在的库和类(与JDK捆绑在一起)。我认为可以帮助您。我发现,如果不添加其他工具和库,可能还不可能做到这一点。 我们可以将

我想在运行时将一个SQL文件(存储在NetBeans Java项目的源文件夹中)从Java应用程序加载到MySQL中。我该怎么做

SQL文件的大小是15.15 MB,我想知道是否可以复制到字符串中?或者,如果我设法将它复制到一个字符串(尽管它可能抛出内存不足错误),如何一次执行多个命令(因为SQL文件包含许多命令)


我想在不使用任何其他工具的情况下完成它。仅使用java中预先存在的库和类(与JDK捆绑在一起)。

我认为可以帮助您。

我发现,如果不添加其他工具和库,可能还不可能做到这一点。

我们可以将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) ;
                }
            }
        });
    }
}
import javax.swing.*;
导入java.sql.*;
导入java.io.*;
公共类LoadSQLFile{
公共静态void main(字符串参数[]){
invokeLater(new Runnable()){
公开募捐{
试一试{
String password=JOptionPane.showInputDialog(null,“我们需要您的MySQL密码来运行应用程序。请在此处输入。”,“MySQL密码?”,JOptionPane.QUESTION_消息);
类forName(“java.sql.Driver”);
Connection conn=DriverManager.getConnection(“jdbc:mysql://localhost/MyDB“,”根“,”密码);
语句stmt=conn.createStatement();
int i=0;

对于(i=1;ii如果文件由单独的较小的SQL命令组成,您应该一次读入每个命令。理论上,您可以加载15Mb的字符串,但可能会耗尽内存。您可以编写一个后台服务,使用
mysqlimport
命令一次加载文件,这将为您完成文件拆分和运行@哈弗谢谢你提供的解决方案,但我不知道怎么做。我只是一名java编程新手。如果你告诉我怎么做,我会很高兴。也许你可以使用flyway库。它用于通过java或sql文件执行flyway迁移。这可能对你的目标来说有点过分,但我建议你去看看。@Anton谢谢。我会查阅网站…没有。但不确定。我认为它不会工作,因为它的连接无法加载到项目源文件夹中包含的MySQL的SQL执行。如果SQL文件很大,这可以吗?是的,因为它使用readLine(),它一次只读取一行。因此,即使SQL文件很大,也不会有任何问题。我担心如果blob的内容或与它相关的内容将具有非单行…因此它最终将失败。