You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

H2数据库执行SQL脚本报错:CREATE SCHEMA语句语法错误

解决H2数据库SQL脚本语法错误的问题

我来帮你拆解一下问题根源和修复方案:

核心错误原因:使用了H2的保留关键字作为Schema名称

database是H2数据库的保留关键字(和SELECTFROM这类SQL命令词属于同一类),直接把它当作Schema名称时,数据库会误以为你在写SQL命令的一部分,从而触发语法错误。

修复方案

方案A:更换非保留字作为Schema名称(推荐)

database改成比如app_db这类不会和关键字冲突的名称,同时建议加上IF NOT EXISTS避免重复创建的错误:

CREATE SCHEMA IF NOT EXISTS app_db;
CREATE USER IF NOT EXISTS ADMIN PASSWORD 'abc';

方案B:保留原名称,用双引号转义

如果你一定要用database作为Schema名称,需要用双引号把它括起来,明确告诉H2这是一个标识符而非关键字:

CREATE SCHEMA IF NOT EXISTS "database";
CREATE USER IF NOT EXISTS ADMIN PASSWORD 'abc';

额外的实用建议

  • 加上IF NOT EXISTS后,即使Schema或用户已经存在,脚本也能正常运行,不会抛出重复创建的错误,让脚本的鲁棒性更强。
  • 你的代码里用了绝对路径读取脚本,在Maven/Gradle项目里,更推荐用类路径读取,这样不管项目部署到哪里都能找到文件:
    Reader reader = new BufferedReader(new InputStreamReader(Main.class.getResourceAsStream("/createDatabaseAndUser.sql")));
    
  • 从错误码42000-199来看,你用的是H2 1.4.199版本,这个版本的CREATE USER语法是没问题的,但如果后续升级H2版本,记得留意语法细节变化。

内容的提问来源于stack exchange,提问作者Private

火山引擎 最新活动