【问题标题】:How to see all tables in my h2 database at localhost:8082?如何在 localhost:8082 查看我的 h2 数据库中的所有表?
【发布时间】:2014-06-17 16:56:10
【问题描述】:

我使用 JDBC 并从 sql 脚本创建了名为 usaDB 的 h2 数据库。然后我用 jdbc 填充所有表。

问题是我在 localhost:8082 连接到 usaDB 后,在左侧树上看不到 我的桌子。只有 INFORMATION_SCHEMA 数据库和 rootUser 我指定创建 usaDB。

如何查看我的h2数据库中表的内容?

我试过查询SELECT * FROM INFORMATION_SCHEMA.TABLES

但它返回了许多表名,除了我创建的那些。我的快照:

【问题讨论】:

  • 检查 JDBC 中的连接字符串。您可能正在连接到其他数据库。但是在创建新数据库之后,您忘记在新表中包含该新数据库名称。喜欢:create newDb.table_name 不见了,我相信。因此,可能会在您使用 JDBC 连接的默认数据库中创建表。
  • 谢谢,但明确创建 usaDB 模式并没有帮助。从 jdbc 我可以检索我的表名和列,但不能在 localhost:8082 。
  • jdbclocalhost:8082 设置有什么区别?
  • 在我看来,除了 jdbc 中的相对路径和 localhost 中的绝对路径外,没有什么区别!
  • No no ... 你的 jdbc 是连接到 locathost 或某个远程服务器上的数据库吗?我的问题是配置差异是什么。

标签: java h2


【解决方案1】:

这是一个老问题,但我遇到了同样的问题。最终我发现默认的 JDBC URL 指向的是测试服务器而不是我的应用程序。更正后,我可以访问正确的数据库。

我尝试了 Generic H2(嵌入式)和 Generic H2(服务器)选项,只要 JDBC URL: 提供正确,它们都可以工作。

在 grails 4.0.1 中,用于开发的 jdbc URL 是 jdbc:h2:mem:devDb。检查您的 application.yml 文件以获取确切的 URL。

【讨论】:

    【解决方案2】:

    对于在嵌入式(持久模式)中使用 H2 并希望从 IntelliJ“连接”到它的人(其他 IDE 可能也适用)。

    1. 使用例如 jdbc url 如下:jdbc:h2:./database.h2
    2. 注意,H2 不允许隐式 relative 路径,需要添加显式 ./
    3. 相对 路径是相对于当前 workdir
    4. 运行应用程序时,您的工作目录很可能设置为项目的根目录
    5. 另一方面,IDE 的工作目录很可能不是您项目的根目录
    6. 因此,在 IDE 中“连接”到数据库时,您需要使用绝对路径,例如:jdbc:h2:/Users/me/projects/MyAwesomeProject/database.h2
    7. 由于某种原因,默认情况下 IntelliJ 还会添加 ;MV_STORE=false。它禁用了实际上当前在 H2 中默认使用的 MVStore 引擎。
    8. 因此请确保您的应用程序和 IDE 使用相同的存储引擎,因为 MVStore 和 PageStore 有不同的file loyouts
    9. 请注意,如果您的应用程序由于锁定而正在使用它,则您无法“连接”到您的数据库。反过来也适用。

    【讨论】:

      【解决方案3】:

      如果您在 Spring Boot 中使用 maven 依赖项创建并填充了 H2 数据库表,请在使用 Web 控制台连接到 H2 时将 JDBC URL 更改为 jdbc:h2:mem:testdb

      【讨论】:

        【解决方案4】:

        选择通用 H2(服务器)为我解决了问题。我们试图使用错误的默认 Generic H2 (Embedded)。

        【讨论】:

          【解决方案5】:

          在我的情况下,问题是由于我没有在 java 中设置 h2 用户名和密码。不幸的是,Spring 没有向我显示任何错误,因此很难弄清楚。将此行添加到 dataSource 方法帮助我解决了这个问题:

          dataSource.setUsername("sa");
          dataSource.setPassword("");
          

          另外,我应该在 schema.sql 中创建表时指定架构

          【讨论】:

            【解决方案6】:

            jar文件的版本和安装的h2数据库应该是一样的。

            【讨论】:

              【解决方案7】:

              您可以使用SHOW 命令:

              使用此命令,您可以列出模式、表或表的列。例如:

              SHOW TABLES
              

              【讨论】:

              • 他想看看他创建的表格。
              【解决方案8】:

              这个问题让我陷入了困境,除了这个页面,我还阅读了很多(很多!)其他的,直到我解决了它。
              我的用例是查看使用 :: Spring Boot :: (v1.3.1.RELEASE) 在 STS 中创建的 SpringBatch 项目如何与 H2 数据库一起运行;要做到后者,我需要能够让 H2 控制台运行以及查询批处理运行的 DB 结果。

              这就是我所做并发现的:

              1. 使用 Spring Boot 在 STS 中创建了一个 Web 项目:

                • 在后者的 pom.xml 中添加了以下内容:
                • 在项目中添加如下Spring配置文件: 这解决了STS中Web项目的不足。如果现在运行项目,可以访问H2控制台如下:http://localhost:8080/console
              2. 现在在 STS 中创建一个 SpringBatch 项目,如下所示(替代方法创建一个不同的模板,缺少大多数用于持久化数据的类。此方法创建 2 个项目:一个 Complete,另一个 initial。在下面使用Complete。):

                • 使用 STS 创建的 SpringBatch 项目使用内存中的 H2 数据库,一旦应用程序运行结束,它就会关闭;运行后,您可以在日志输出中看到这一点。
                • 所以我们需要创建一个新的数据源来覆盖项目附带的默认值(如果您有兴趣,只需查看日志消息,您会发现它使用默认数据源...这个创建自: osjdeEmbeddedDatabaseFactory 带有以下参数:
                  启动嵌入式数据库:url='jdbc:hsqldb:mem:testdb', 用户名='sa')
                • 因此,它在内存中启动一个,然后关闭它。您没有机会使用 H2 控制台查看数据;它来了又走了。
                • 因此,创建一个 DataSource,如下所示:
                • 您当然可以使用属性文件来映射参数,并为不同的 DataSource 实例配置配置文件...但我离题了。
                • 现在,请确保将图片中红色箭头所指的位设置为计算机上可以保存文件的位置。
                • 运行 SpringBatch(Complete 项目),您现在应该在它运行后在该位置有一个 db 文件(持久化人员数据)
                • 运行您之前在这些步骤中配置的 Web 项目,您将 :=) 看到您的数据,以及所有 Batch 作业和步骤运行数据(瞧!): 痛苦但有回报。希望它可以帮助您真正 BOOTSTRAP :=)

              【讨论】:

                【解决方案9】:

                我有同样的问题,答案似乎很愚蠢:当你输入你的数据库名称时,你不应该添加“.h2.db”后缀,例如,如果你有 db文件 "D:\somebase.h2.db" 你的连接字符串应该像 "jdbc:h2:file:/D:/somebase"。以另一种方式,jdbc 创建名为“somebase.h2.db.h2.db”的新空数据库文件,您会看到您所看到的:只有系统表。

                【讨论】:

                • 是的,也是可能的原因
                • 我在 h2 的多个数据库客户端工具中观察到了这一点。基于 Web 的 h2 客户端、DBeaver、..
                • 它对我有用。太感谢了。扩展似乎是这里的罪魁祸首。
                【解决方案10】:

                我正好遇到了这个问题。

                根据您的描述,我假设您将 jdbc 与“真实”h2 服务器连接,但是您通过错误的模式(嵌入式内存模式,又名 h2mem)将 Web 应用程序连接到数据库。这意味着 h2 将在内存中创建一个新的数据库,而不是使用存储在其他地方的真实数据库。

                请确保当您连接到该数据库时,您使用模式Generic H2(服务器),而不是Generic H2(嵌入式)。大家可以参考下图。

                【讨论】:

                  猜你喜欢
                  • 1970-01-01
                  • 1970-01-01
                  • 2010-10-10
                  • 1970-01-01
                  • 1970-01-01
                  • 2012-11-07
                  • 2019-12-07
                  • 1970-01-01
                  • 1970-01-01
                  相关资源
                  最近更新 更多