如何使用 Java 执行文件夹中的所有 sql 脚本?

How to execute all sql scripts in a Folder using Java?

我想通过 Java 在一个文件夹中执行所有 sql 脚本。它不起作用,因为之前它创建了一个新模式(命名为用户名)并且没有采用 sql 脚本中编写的模式。现在我得到了下面显示的异常的 44 倍。连接正常。哦,我正在使用 DB2。

我试过以下方法:

public void sqlScripts() throws IOException, SQLException {

        File folder = new File("E:/maProject/sql");
        File[] listOfFiles = folder.listFiles();

        for (File file : listOfFiles) {

            BufferedReader reader = null;
            Statement statement = null;

            try {
                statement = con.createStatement();
                reader = new BufferedReader(new FileReader(file));
                statement.execute(String.valueOf(file));

            } catch (Exception e) {
                e.printStackTrace();

            }
        }
    }

这是我得到 44x 的异常:

com.ibm.db2.jcc.am.SqlSyntaxErrorException: DB2 SQL Error: SQLCODE=-7, SQLSTATE=42601, SQLERRMC=\;E:, DRIVER=4.26.14

我做错了什么?

提前致谢

SQLCODE=7SQL0007N

错误信息的描述是

SQL0007N The statement was not processed because a character that is not supported in SQL statements was included in the SQL statement.

The specified character is not a valid character in SQL statements. The "" runtime token indicates the 20 characters of the SQL statement that preceded the character that is not valid.

所以你的无效字符是(接近)这个文本\;E:

我怀疑您正试图 运行 在一个语句中包含两个语句。根据例如 你需要一次执行一个语句

正如@mustaccio 所说,我尝试执行文件名而不是文件内容。所以现在我要做的是:

 public void sqlScripts() {

        try {
            File folder = new File("E:/maProject/sql");
            File[] listOfFiles = folder.listFiles();

            for (File file : listOfFiles) {
                ScriptRunner scriptRunner = new ScriptRunner(con, false, false);

                // Give the input file to Reader
                Reader reader = new BufferedReader(new FileReader(file));
                scriptRunner.runScript(reader);
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }