【问题标题】:Connect to H2 database using IntelliJ database client使用 IntelliJ 数据库客户端连接到 H2 数据库
【发布时间】:2015-05-10 13:04:19
【问题描述】:

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

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 的数据库客户端工具为此数据库设置连接。我开始像这样创建连接

然后在下面的对话框中,我输入 JDBC URL

然后在“Schemas & Tables”选项卡上选择所有可用的数据库。

“测试连接”按钮表示成功,但是从红圈可以看出,没有找到表。似乎我已经正确设置了与 h2 服务器的连接,但没有正确设置架构本身。

顺便说一句,我会在应用程序运行后尝试设置此连接,因此我确信架构/表确实存在。

【问题讨论】:

  • 你有没有想过这个问题?我使用 Mark 的建议无济于事(使用 AUTO_SERVER=TRUE,并在根目录中嵌入 DB)。我似乎永远无法从 Intellij 浏览 H2 数据库。这变得异常困难。

标签: grails intellij-idea h2


【解决方案1】:

您的配置适用于 h2:mem 数据库。内存数据库在连接到它们时没有表,并且当所有连接关闭时,任何和所有表都会丢失。此外,内存数据库中的(命名)对于打开它的 JVM 进程来说是独有的。来自H2 documentation

有时需要多个连接到同一个内存数据库。在这种情况下,数据库 URL 必须包含名称。示例:jdbc:h2:mem:db1。 使用此 URL 访问同一数据库仅适用于同一虚拟机和类加载器环境。(已添加重点)

这意味着 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 了解更多信息。

【讨论】:

  • 对于那些想知道如何启用混合模式的人:jdbc:h2:~/test;AUTO_SERVER=TRUE(在应用程序配置和想法数据库管理器设置中)
  • 为什么 Intellji 有一个 H2 选项来连接它,如果它在 JVM 级别上是不可能的?专为混合模式使用?
【解决方案2】:

如果您碰巧使用 Spring Boot,这篇文章对如何设置 IntelliJ 数据库客户端以连接到 H2 内存数据库有很好的描述:http://web.archive.org/web/20160513065923/http://blog.techdev.de/querying-the-embedded-h2-database-of-a-spring-boot-application/

基本上,你用一个 tcp 服务器包装内存数据库,然后你有一个访问点通过远程访问连接到一个 sql 客户端。

【讨论】:

    【解决方案3】:

    在开发过程中你可以使用 grails h2 dbconsole

    【讨论】:

    • 这个想法是我们希望 Intellij 从数据库中给我们代码提示
    【解决方案4】:

    尝试打开http://localhost:8080/dbconsole并填写你的jdbc url

    【讨论】:

    • 如果您使用的是 Spring Boot,您应该在 application.properties 文件中包含 spring.h2.console.enabled=true
    • localhost:8080/h2-console url 在上面没有提到。
    【解决方案5】:

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

    步骤 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 数据库客户端

    步骤 3. 根据您的 application.yml 属性配置 H2 数据库客户端属性。

    第 4 步。运行应用程序。

    步骤 5. 检查是否创建了表(用户、地址)。

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

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

    【讨论】:

      猜你喜欢
      • 2020-10-07
      • 2020-03-22
      • 1970-01-01
      • 2020-08-12
      • 1970-01-01
      • 1970-01-01
      • 2020-12-19
      • 2012-06-04
      • 1970-01-01
      相关资源
      最近更新 更多