如何在本地8082端口查看我h2数据库中的所有表格?

40

我使用JDBC创建了名为usaDB的H2数据库,并从sql脚本中填充了所有表。连接到localhost:8082上的usaDB后,我无法在左侧的树形结构中看到我的表。只有INFORMATION_SCHEMA数据库和我创建usaDB时指定的rootUser。

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

我尝试了查询SELECT * FROM INFORMATION_SCHEMA.TABLES

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

enter image description here


2
检查JDBC中的连接字符串。您可能正在连接到其他数据库。但是在创建新数据库后,您忘记将新的数据库名称与新表一起包含。例如:我相信缺少了“create newDb.table_name”。因此,使用JDBC连接到的默认数据库中可能已经创建了表。 - Ravinder Reddy
谢谢,但是明确创建usaDB模式并没有帮助。通过jdbc我可以检索到我的表名和列,但在localhost:8082上却不能。 - Volodymyr Levytskyi
在JDBC和本地主机中,除了相对路径和绝对路径之外,我看不出任何区别! - Volodymyr Levytskyi
我在我的电脑上使用Windows安装程序安装了h2数据库。我仅使用本地h2服务器。 - Volodymyr Levytskyi
你是否更改了与MVCC设置相关的内容? - voho
显示剩余3条评论
10个回答

54

我曾经遇到过同样的问题,答案似乎非常愚蠢:当您输入数据库名称时,不应添加.h2.db后缀。例如,如果您有名为D:\somebase.h2.db的db文件,您的连接字符串应该像jdbc:h2:file:/D:/somebase这样。否则,jdbc将创建一个名为somebase.h2.db.h2.db的新空数据库文件,并且你会看到你所看到的只是系统表。


是的,这也是可能的原因。 - Hoàng Long
我在多个h2数据库客户端工具中观察到了这一点。包括基于Web的h2客户端和DBeaver等工具。 - tharinduwijewardane
它对我起作用了。非常感谢。 扩展似乎是罪魁祸首。 - Srikumar Krishna Iyer

34
你可以使用 SHOW 命令: grammar 使用此命令,可以列出模式、表或表的列。例如:
SHOW TABLES

他想要查看他创建的表。 - aliopi

15
这个问题让我抓狂了,除了看这个页面,我还阅读了很多其他页面,直到解决为止。我的用例是想看看在STS中使用“:: Spring Boot ::(v1.3.1.RELEASE)”创建的SpringBatch项目将如何与H2数据库进行交互; 为此,我需要能够运行H2控制台以查询批处理运行的DB结果。
以下是我所做的和发现的内容:
  1. 使用Spring Boot在STS中创建Web项目: 输入图像描述

    • 将以下内容添加到后者的pom.xml中: 输入图像描述
    • 向项目添加一个Spring配置文件,如下所示: 输入图像描述 这解决了STS中Web项目的缺陷。如果现在运行该项目,则可以按以下方式访问H2控制台:http://localhost:8080/console 输入图像描述
  2. 现在在STS中创建SpringBatch项目,方法如下(另一种方法创建了一个不包含大部分持久化数据类的不同模板。此方法创建了两个项目:一个Complete,另一个是initial。在下面使用Complete): 输入图像描述

    • 使用STS创建的SpringBatch项目使用内存H2数据库,在应用程序运行结束时关闭;运行后,您可以在日志输出中看到这一点。
    • 因此,我们需要创建一个新的数据源,覆盖随项目一起提供的默认数据源(如果您感兴趣,请查看日志消息,您将看到它使用默认数据源...这是从以下内容创建的: o.s.j.d.e.EmbeddedDatabaseFactory,具有以下参数:
      Starting embedded database: url='jdbc:hsqldb:mem:testdb', username='sa')
    • 因此,它启动了一个内存数据库,然后关闭了它。您无法使用H2控制台查看数据;它已经来了又走了。
    • 因此,请按以下方式创建数据源: 输入图像描述
    • 当然,您可以使用属性文件映射参数,并为不同的DataSource实例使用配置文件...但我偏离主题了。
    • 现在,请确保将图片中红色箭头指向的位设置为计算机上可以持久化文件的位置。
    • 运行SpringBatch(Complete项目),运行后应该会在该位置有一个数据库文件(持久化Person数据)
    • 运行您之前配置的Web项目,您将看到您的数据和所有批处理作业和步骤运行数据(et voila!): 输入图像描述 痛苦但值得。希望它能帮助您真正启动 :=)

5

我遇到了与您完全相同的问题。

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

请确保在连接到此数据库时,您使用模式通用H2(服务器),而不是通用H2(嵌入式)模式。您可以参考下面的图片。

enter image description here


1

对于使用嵌入式(持久化模式)H2并想要从IntelliJ连接到它的人(其他IDE可能也适用)。

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

1

jar文件的版本和安装的h2数据库版本应该相同。


1
如果您使用Spring Boot中的Maven依赖项创建和填充了H2数据库表,则在使用Web控制台连接到H2时,请将JDBC URL更改为jdbc:h2:mem:testdb。请注意,本文不提供解释。保留HTML标记。

1
这是一个老问题,但我遇到了同样的问题。最终我发现默认的JDBC URL指向了测试服务器而不是我的应用程序。更正后,我可以访问正确的数据库。
我尝试了通用H2(嵌入式)和通用H2(服务器)选项,只要提供了正确的JDBC URL,两者都可以工作。
在grails 4.0.1中,开发环境的jdbc URL为jdbc:h2:mem:devDb。请检查您的application.yml文件以获取确切的URL。 enter image description here

0
选择通用的H2(服务器)对我来说解决了问题。我们曾尝试使用默认的通用H2(嵌入式),这是错误的。

0
在我的情况下,问题是由于我没有在Java中设置h2用户名和密码引起的。不幸的是,Spring没有向我显示任何错误,因此很难找出问题所在。将这些行添加到dataSource方法中有助于我解决问题:
dataSource.setUsername("sa");
dataSource.setPassword("");

另外,在 schema.sql 中创建表时,我应该指定模式。


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