org.h2.jdbc.JdbcSQLSyntaxErrorException:SQL 语句“CREATE[*] SCHEMA DATABASE”中的语法错误; SQL 语句:
Posted
技术标签:
【中文标题】org.h2.jdbc.JdbcSQLSyntaxErrorException:SQL 语句“CREATE[*] SCHEMA DATABASE”中的语法错误; SQL 语句:【英文标题】:org.h2.jdbc.JdbcSQLSyntaxErrorException: Syntax error in SQL statement "CREATE[*] SCHEMA DATABASE "; SQL statement: 【发布时间】:2020-01-30 14:58:03 【问题描述】:这里是主类:
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 方言是 H2,我在 Intelij IDEA 中使用嵌入式 H2 数据库。
我刚开始学习 SQL 和 SQL 脚本,如果问题很愚蠢,请提前道歉。
【问题讨论】:
@Larnu 好的,当我将方言更改为 Postgres 并创建数据库名称时;我有同样的错误 @Larnu 好的,这是我关于服务器的错误。我用的是H2方言,怎么解决呢? 【参考方案1】:您使用的工具的输出似乎以某种方式出现乱码。有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'");
【讨论】:
以上是关于org.h2.jdbc.JdbcSQLSyntaxErrorException:SQL 语句“CREATE[*] SCHEMA DATABASE”中的语法错误; SQL 语句:的主要内容,如果未能解决你的问题,请参考以下文章