使用IntelliJ数据库客户端连接H2数据库

86

我的Grails应用在开发模式下使用h2数据库(这是Grails应用的默认行为)。DataSource.groovy中的数据库连接设置如下:

dataSource {
    pooled = true
    jmxExport = true
    driverClassName = "org.h2.Driver"
    username = "sa"
    password = ""
    dbCreate = "create-drop" // one of 'create', 'create-drop', 'update', 'validate', ''
    url = "jdbc:h2:mem:devDb;MVCC=TRUE;LOCK_TIMEOUT=10000;DB_CLOSE_ON_EXIT=FALSE"
}

我正在尝试使用IntelliJ IDEA的数据库客户端工具来设置与该数据库的连接。我首先创建连接,如下所示:

enter image description here

然后在以下对话框中输入JDBC URL:

enter image description here

并在“模式和表”选项卡上选择所有可用的数据库。

enter image description here

“测试连接”按钮指示成功,但是从红色圆圈中可以看出没有发现表格。看起来我已经正确地设置了与h2服务器的连接,但没有设置模式本身。

顺便说一句,在应用程序运行时我尝试设置此连接,因此我确定模式/表确实存在。


2
你最终解决了吗?我尝试了Mark的建议(使用AUTO_SERVER=TRUE,并将嵌入式数据库放在根目录中),但没有用。我似乎永远无法从Intellij浏览H2数据库。这变得非常困难。 - Jack
请返回翻译后的文本。 - jase
5个回答

126
您的配置是针对 h2:mem 数据库。内存数据库连接时没有任何表格,并且在所有连接关闭时都会丢失所有表格。此外,(命名的)内存数据库是仅针对打开它的 JVM 进程的。从 H2 文档 中可以知道:

有时需要多个连接到同一个内存数据库。在这种情况下,数据库 URL 必须包含名称。例如:jdbc:h2:mem:db1。只有在同一虚拟机和类装入器环境中使用此 URL 访问同一数据库才有效。 (强调 added)

这意味着 IDEA 将在其 JVM(和类加载器)空间中创建一个唯一的 devDb,而您的应用程序将在其 JVM(和类加载器)空间中创建一个唯一的 devDb。您无法从外部 JVM 进程连接到内存数据库。
如果您想同时将您的应用程序和 IntelliJ IDEA(或任何其他 DB 工具)连接到 H2 数据库,您需要:
  1. 在应用程序中使用嵌入式数据库(写入文件),并使用 Mixed Mode 允许 IntelliJ IDEA(和/或其他数据库工具)连接到它
  2. 使用服务器模式数据库
有关更多信息,请参见 http://www.h2database.com/html/features.html#connection_modes

25
想要启用混合模式的人可以使用以下内容:jdbc:h2:~/test;AUTO_SERVER=TRUE(在应用程序配置和Idea数据库管理器设置中都要使用)。请注意,翻译不会包含任何解释或其他内容。 - deviant
7
为什么Intellji有一个H2选项可以连接到它,如果在JVM级别上不可能实现呢?特别是为了混合模式使用? - Janac Meena

21

6

8
如果你正在使用Spring Boot,你应该在application.properties文件中添加spr‌ing.h2.console.enabled=true - Basheer AL-MOMANI
8
"http://localhost:8080/h2-console" 的URL可用,不同于上述提到的URL。 - Muhammad Azam

3

假设您已经创建了实体(用户、地址)

步骤1. 在 application.yml 文件中添加 H2 属性。

server:
  port: 8080

spring:
  datasource:
    url: jdbc:h2:~/data/parserpalce (for Mac OS)
    username: sa
    password: password
    driver-class-name: org.h2.Driver
  jpa:
    database-platform: org.hibernate.dialect.H2Dialect
    hibernate:
      ddl-auto: update
  h2:
    console:
      enabled: true

步骤2:添加H2数据库客户端 enter image description here

步骤3:根据你的application.yml属性配置H2数据库客户端属性。 enter image description here

步骤4:运行应用程序。

步骤5:检查是否创建了表(Users, Addresses)。 enter image description here

或者你可以在浏览器中使用H2控制台: http://localhost:8080/h2-console

附言:不要忘记在字段中粘贴适当的值!


3

在开发过程中,您可以使用Grails的h2 dbconsole

来进行数据库操作。


我们的想法是希望Intellij能够从数据库中给我们提供代码提示。 - Janac Meena

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接