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

IntelliJ连接内存H2数据库成功但无法查看表内容问题

内存模式H2 IntelliJ连接后看不到表问题修复

内存模式(mem模式)H2的默认运行机制是仅同一JVM进程内的连接可访问同一份数据,跨进程发起的连接哪怕JDBC路径写法完全一致,也会生成独立的空内存库,这就是h2-console可以正常访问数据、IntelliJ连接后看不到表的根本原因——你当前在IntelliJ里配置的连接属于独立进程,根本没有接入项目运行时持有表和数据的那个H2内存实例。

操作步骤

    1. 调整项目侧H2配置,开启跨进程TCP访问
      把你项目里的H2数据源连接地址改成TCP协议格式,同时加上库保活参数,以SpringBoot项目的yml/properties配置为例:
      spring.datasource.url=jdbc:h2:tcp://localhost:9092/mem:你的库名;DB_CLOSE_DELAY=-1
      两个必填配置说明:
    • tcp://localhost:9092:指定H2启动可跨进程访问的TCP服务,端口可以自行替换为未被占用的端口
    • DB_CLOSE_DELAY=-1:禁止最后一个连接断开后自动清空内存库,避免数据意外丢失
    1. 配置项目启动时自动拉起H2 TCP服务
      H2自带TCP服务能力,不需要额外引入依赖,在SpringBoot启动类或者配置类里加如下Bean即可:
    @Bean(initMethod = "start", destroyMethod = "stop")
    public Server h2TcpServer() throws SQLException {
        return Server.createTcpServer("-tcp", "-tcpAllowOthers", "-tcpPort", "9092");
    }
    
    注意这里的端口要和前面连接串里的端口保持一致。
    1. 重新配置IntelliJ侧的H2连接
      先删掉之前创建的无效H2连接,等项目完全启动、表结构初始化完成后,再新建H2连接,连接地址填写和项目配置完全一致的TCP地址,用户名、密码和你访问h2-console时使用的凭证保持一致。

常见踩坑排查

  • 不要在项目启动前就用IntelliJ发起连接:此时H2的TCP服务还未启动,IntelliJ会自行创建一个空的内存库实例,后续项目启动时会出现端口占用、库锁冲突问题
  • 连接成功后手动勾选对应schema:IntelliJ默认不会加载所有schema,如果你建表时用的是默认的PUBLIC schema,需要在数据库面板的连接配置 -> Schemas标签页下把对应schema勾选上,再点刷新按钮才能看到表
  • 确保连接串完全匹配:库名、端口写错会直接连到新的空实例,自然看不到任何业务表

配置完成后点击IntelliJ数据库面板的刷新按钮,就能看到和h2-console中完全一致的表和数据,后续可以直接在IDE内执行SQL、编辑数据,操作会实时同步到项目运行的内存库中。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 06:18:22