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

beq87vna  于 2023-03-28  发布在  Mysql
关注(0)|答案(4)|浏览(85)

我想在运行时从我的Java应用程序将SQL文件(存储在NetBeans Java项目的源文件夹中)加载到MySQL中。如何执行此操作?
SQL文件大小为15.15 MB,我想知道我是否可以复制到一个字符串或不?或者如果我无论如何设法复制它到一个字符串(虽然它可能抛出内存错误),如何执行多个命令在一个去(因为SQL文件包含许多命令)。
我想不使用任何额外的工具来完成它,只使用Java中预先存在的库和类(与JDK捆绑在一起)。

kt06eoxx

kt06eoxx1#

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

我们可以通过将SQL文件拆分成更小的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文件存储在我的项目的源文件夹中的一个名为“sql_files”的包。文件的名称是- BCK1.sql,BCK2.sql,....,BCK16.sql。每个文件只包含一个SQL文件在第一行。它对我来说很好。

  • 我为此使用了MySQL JDBC驱动程序。*
w80xi6nr

w80xi6nr2#

我认为ScriptUtils.executeSqlScript可以帮助你。

o2g1uqev

o2g1uqev3#

使用以下代码:

public static String readFileAsString(Class clazz, String filePath) throws IOException {
    InputStream inputStream = clazz.getClassLoader().getResourceAsStream(filePath);
    if (inputStream == null) {
        throw new IllegalArgumentException("File not found: " + filePath);
    }
    return IOUtils.toString(inputStream);
}

public static final Path SQL_QUERY_FILE_PATH = Paths.get("SqlFolder", "productQuery.sql");

String sqlQuery = FileResourceUtil.readFileAsString(getClass(), SQL_QUERY_FILE_PATH.toString());
suzh9iv8

suzh9iv84#

下面是一个例子,这将打印3个语句。

public static void main(String[] args) {
        var sql = "select;insert(';')\n sdfsd;"
                + "update";

        List<String> stmt = new ArrayList<>();

        org.springframework.jdbc.datasource.init.ScriptUtils.splitSqlScript(sql, ";", stmt);

        stmt.forEach(e -> log.info(e));
    }

相关问题