首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >org.h2.jdbc.JdbcSQLSyntaxErrorException: SQL语句"CREATE[*] SCHEMA DATABASE“语法错误;SQL语句:

org.h2.jdbc.JdbcSQLSyntaxErrorException: SQL语句"CREATE[*] SCHEMA DATABASE“语法错误;SQL语句:
EN

Stack Overflow用户
提问于 2020-01-30 22:58:04
回答 1查看 5.4K关注 0票数 2

下面是主类:

代码语言:javascript
复制
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文件:

代码语言:javascript
复制
CREATE SCHEMA database;
CREATE USER ADMIN PASSWORD 'abc';

我正在尝试运行我的SQL脚本,但收到并出错。

以下是所有输出:

代码语言:javascript
复制
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方言是H2,并且我使用Intelij IDEA中的嵌入式H2数据库。

我刚开始学习SQL和SQL脚本,所以如果问题很愚蠢,请提前道歉。

EN

回答 1

Stack Overflow用户

发布于 2020-01-31 21:58:53

看起来您使用的工具的输出不知何故是乱码。有CREATE[*] SCHEMA DATABASE命令([*]是来自H2的标记),但是源SQL被列为

代码语言:javascript
复制
CREATE USER ADMIN PASSWORD 'abc'                                                                
CREATE SCHEMA database

由于两个命令之间缺少分号,它显然是无效的。

两个位置应相同( [*]标记除外),错误消息应为

代码语言:javascript
复制
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中执行脚本:

代码语言:javascript
复制
Statement st = conn.createStatement();
st.execute("RUNSCRIPT FROM 'C:\\PROJECTS\\src\\main\\resources\\createDatabaseAndUser.sql'");
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59988775

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档