【问题标题】:How to execute all sql scripts in a Folder using Java?如何使用 Java 执行文件夹中的所有 sql 脚本?
【发布时间】:2020-08-14 11:29:21
【问题描述】:

我想通过 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();

            }
        }
    }

这是我得到 44 倍的异常:

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

我做错了什么?

提前致谢

【问题讨论】:

  • 不,不是重复
  • 是否必须使用您的 java 代码运行这些文件?您是否允许为此运行其他基于 java 的工具?
  • 您正在尝试执行文件 name 而不是其内容。
  • IBM Data Server Driver Package 包含名为 CLPPlus 的基于 JDBC 的工具。它具有执行脚本的能力。检查一下。

标签: java sql database db2 sql-scripts


【解决方案1】:

SQLCODE=7SQL0007N

错误信息的描述是

SQL0007N 未处理该语句,因为一个字符 SQL 语句中不支持的已包含在 SQL 语句中。

指定的字符不是 SQL 语句中的有效字符。 "" 运行时标记表示 SQL 的 20 个字符 无效字符之前的语句。

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

我怀疑您试图在一个语句中运行两个语句。根据例如https://stackoverflow.com/a/2071724/9525344,您需要一次执行一个语句

【讨论】:

    【解决方案2】:

    正如@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();
            }
        }
    

    【讨论】:

      猜你喜欢
      • 2011-01-05
      • 1970-01-01
      • 2015-01-26
      • 1970-01-01
      • 1970-01-01
      • 2010-10-13
      • 1970-01-01
      • 2014-01-09
      • 2023-01-18
      相关资源
      最近更新 更多