You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

H2数据库能否独立于IDE运行?自动插数据及枚举报错求助

H2数据库相关问题解决方案

一、IntelliJ中H2 SQL日志显示与自动数据插入设置

  • SQL日志显示:要在IntelliJ控制台看到建表、插入数据的SQL日志,只需在application.properties中添加以下配置:
    logging.level.org.springframework.jdbc=DEBUG
    logging.level.h2=DEBUG
    
  • 自动插入数据:Spring Boot默认会自动执行src/main/resources或src/test/resources下的data.sql文件(Spring Boot 2.x及以上版本,需确保spring.sql.init.mode=always,可根据环境调整:开发环境用always,生产环境用never),无需手动插入,也不用在数据源URL中添加INIT=RUNSCRIPT参数,避免重复执行脚本引发冲突。

二、H2数据库能否独立于IDE存在

H2完全可以脱离IDE运行,它有多种运行模式:

  • 内存模式:默认的mem模式是进程内数据库,进程结束数据就消失,适合测试场景;
  • 文件模式:将数据源URL改为jdbc:h2:file:/path/to/your/db,数据会持久化到本地文件,即使IDE关闭,下次启动仍能加载数据;
  • 独立服务器模式:可以启动H2独立服务器,通过JDBC连接串jdbc:h2:tcp://localhost/~/test远程连接,和MySQL等数据库的使用方式一致,完全脱离IDE运行。

三、data.sql枚举重复创建错误解决

错误原因

在数据源URL中添加INIT=RUNSCRIPT参数执行data.sql,同时Spring Boot的自动初始化机制又会再次执行该脚本,导致枚举类型被重复创建,抛出Domain "CATEGORY" already exists错误;直接注释枚举创建语句后,建表时又找不到对应的枚举类型。

解决方案

  1. 移除URL中的INIT参数:让Spring Boot的自动初始化机制来处理data.sql,避免重复执行脚本。
  2. 修改data.sql脚本:先删除已存在的枚举和表,再创建新的枚举和表,确保每次执行脚本时环境干净:
    -- 清理已存在的表和枚举
    DROP TABLE IF EXISTS Encouragement;
    DROP TYPE IF EXISTS Category;
    DROP TYPE IF EXISTS Tone;
    DROP TYPE IF EXISTS Topic;
    
    -- 创建枚举类型
    CREATE TYPE Category AS ENUM('WhoIAmInChrist','Default');
    CREATE TYPE Tone AS ENUM('Default', 'Uplifting', 'Urging', 'Warning', 'Soothing', 'Comforting', 'Inspiring', 'Centering', 'Balanced');
    CREATE TYPE Topic AS ENUM('Default', 'AcceptedInChrist', 'SignificantInChrist', 'SecureInChrist', 'NoAnxietyInChrist');
    
    -- 创建表并插入数据
    CREATE TABLE Encouragement(ID INT PRIMARY KEY, CATEGORY Category, TOPIC Topic, TONE Tone, MESSAGE VARCHAR(512));
    INSERT INTO Encouragement VALUES(-1, 'Default', 'Default', 'Default', 'We walk by Faith, not by Sight');
    INSERT INTO Encouragement VALUES(0,'WhoIAmInChrist','AcceptedInChrist','Uplifting','John 1:12 I am God''s child.');
    INSERT INTO Encouragement VALUES(1,'WhoIAmInChrist','AcceptedInChrist','Uplifting','John 15:15 As a disciple, I am a friend of Jesus Christ.');
    
  3. 配置初始化模式:在application.properties中设置spring.sql.init.mode=always,确保开发环境下每次启动都执行初始化脚本。

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.06 08:05:36