Как выполнить все сценарии sql в папке, используя Java? - PullRequest
0 голосов
/ 30 апреля 2020

Я хочу выполнить все sql -скрипты в одной папке через Java. Он не работает, потому что ранее он создал новую схему (названную как имя пользователя) и не принял схему, написанную в сценарии sql. И теперь я получаю 44x Исключение, показанное ниже. Соединение работает. О, и я использую 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

Что я делаю не так?

Заранее спасибо

Ответы [ 2 ]

0 голосов
/ 06 мая 2020

Как сказал @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();
        }
    }
0 голосов
/ 30 апреля 2020

SQLCODE=7 равно SQL0007N

Описание сообщения об ошибке:

SQL0007N Оператор не был обработан, поскольку символ, который не поддерживается в операторах SQL был включен в оператор SQL.

Указанный символ не является допустимым символом в операторах SQL. "" Маркер времени выполнения указывает 20 символов оператора SQL, которые предшествуют недопустимому символу.

Таким образом, ваш недопустимый символ (близок к этому тексту) \;E:

Я подозреваю, что вы пытаетесь запустить два оператора в одном. Например, { ссылка } вам нужно выполнять операторы по одному

...