org.h2.jdb c .JdbcSQLSyntaxErrorException: синтаксическая ошибка в SQL операторе "CREATE [*] SCHEMA DATABASE"; SQL заявление: - PullRequest
0 голосов
/ 30 января 2020

Здесь основной класс:

public class Main {
// JDBC driver name and database URL
static final String JDBC_DRIVER = "org.h2.Driver";
static final String DB_URL = "jdbc:h2:mem:default";

//  Database credentials
static final String USER = "sa";
static final String PASS = "";



public static void main(String[] args) {
    Connection conn = null;
    Statement stmt = null;
    try {
        // STEP 1: Register JDBC driver
        Class.forName(JDBC_DRIVER);

        //STEP 2: Open a connection
        System.out.println("Connecting to database...");
        conn = DriverManager.getConnection(DB_URL, USER, PASS);

        //STEP 3: Execute a query
        ScriptRunner sr = new ScriptRunner(conn);
        //Creating a reader object
        Reader reader = new BufferedReader(new FileReader("C:\\PROJECTS\\src\\main\\resources\\createDatabaseAndUser.sql"));
        //Running the script
        sr.runScript(reader);


        // STEP 4: Clean-up environment

        conn.close();
    } catch (SQLException se) {
        //Handle errors for JDBC
        se.printStackTrace();
    } catch (Exception e) {
        //Handle errors for Class.forName
        e.printStackTrace();
    } finally {
        //finally block used to close resources
        try {
            if (stmt != null) stmt.close();
        } catch (SQLException se2) {
        } // nothing we can do
        try {
            if (conn != null) conn.close();
        } catch (SQLException se) {
            se.printStackTrace();
        } //end finally try
    } //end try
    System.out.println("Goodbye!");
}
}

createDatabaseAndUser. sql Файл, который находится в папке ресурсов:

CREATE SCHEMA database;
CREATE USER ADMIN PASSWORD 'abc';

Я пытаюсь запустить мой SQL скрипт, но получаю и ОШИБКА.

Здесь все выводятся:

Connecting to database...                                                                       
CREATE SCHEMA database

Error executing: CREATE SCHEMA database.Cause: org.h2.jdbc.JdbcSQLSyntaxErrorException: Syntax error
 in SQL statement "CREATE[*] SCHEMA DATABASE"; SQL statement:
CREATE USER ADMIN PASSWORD 'abc'                                                                
CREATE SCHEMA database      


[42000-199]
Goodbye!

Мой SQL Диалект Н2, и я использую встроенную базу данных Н2 в Intelij IDEA.

Я только начинаю учиться SQL и SQL скриптов, поэтому заранее извините, если вопрос глупый.

1 Ответ

0 голосов
/ 31 января 2020

Похоже, что результат работы используемого вами инструмента искажен. Существует команда CREATE[*] SCHEMA DATABASE ([*] - маркер от H2), но источник SQL указан как

CREATE USER ADMIN PASSWORD 'abc'                                                                
CREATE SCHEMA database

, и он явно недопустим из-за отсутствия точки с запятой между двумя командами.

Оба места должны быть одинаковыми (за исключением отметки [*]), а сообщение об ошибке должно быть

Syntax error in SQL statement "CREATE USER ADMIN PASSWORD 'abc'
CREATE[*] SCHEMA DATABASE "; SQL statement:
CREATE USER ADMIN PASSWORD 'abc'
CREATE SCHEMA database [42000-199]

Таким образом, в исходном файле у вас пропущена точка с запятой, или этот инструмент удаляет Это. На самом деле вам не нужно использовать сторонний инструмент, вы можете выполнить скрипт непосредственно в H2:

Statement st = conn.createStatement();
st.execute("RUNSCRIPT FROM 'C:\\PROJECTS\\src\\main\\resources\\createDatabaseAndUser.sql'");
...