我想在运行时从我的Java应用程序将SQL文件(存储在NetBeans Java项目的源文件夹中)加载到MySQL中。如何执行此操作?SQL文件大小为15.15 MB,我想知道我是否可以复制到一个字符串或不?或者如果我无论如何设法复制它到一个字符串(虽然它可能抛出内存错误),如何执行多个命令在一个去(因为SQL文件包含许多命令)。我想不使用任何额外的工具来完成它,只使用Java中预先存在的库和类(与JDK捆绑在一起)。
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文件在第一行。它对我来说很好。
w80xi6nr2#
我认为ScriptUtils.executeSqlScript可以帮助你。
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());
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)); }
4条答案
按热度按时间kt06eoxx1#
我发现,如果不添加额外的工具和库,可能还不可能做到这一点。
我们可以通过将SQL文件拆分成更小的SQL文件来实现,每个SQL文件只包含一个SQL命令,然后启动一个循环来同时执行所有这些文件。
下面是我用来做这件事的代码:
我是执行SQL文件存储在我的项目的源文件夹中的一个名为“sql_files”的包。文件的名称是- BCK1.sql,BCK2.sql,....,BCK16.sql。每个文件只包含一个SQL文件在第一行。它对我来说很好。
w80xi6nr2#
我认为ScriptUtils.executeSqlScript可以帮助你。
o2g1uqev3#
使用以下代码:
suzh9iv84#
下面是一个例子,这将打印3个语句。