如何在localhost:8082查看我的h2数据库中的所有表?

时间:2014-05-01 07:37:36

标签: java h2

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

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

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

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

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

enter image description here

10 个答案:

答案 0 :(得分:41)

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

答案 1 :(得分:19)

您可以使用SHOW命令:

grammar

使用此命令,可以列出表的模式,表或列。 e.g:

taking Apple from room 3 : {'Arrow': 3, 'Bow': 1}
-- Sorry, no Apple in room 3 to take
taking Apple from room 4 : {'Arrow': 5}
-- Sorry, no Apple in room 4 to take
dropping monkey in room 6 : {'Arrow': 10}
-- dropped monkey in room 6 : {'monkey': 1, 'Arrow': 10}
dropping Apple in room 5 : {'Bow': 1}
-- dropped Apple in room 5 : {'Apple': 1, 'Bow': 1}
taking Bow from room 3 : {'Arrow': 3, 'Bow': 1}
-- took Bow from room 3 : {'Arrow': 3}
dropping monkey in room 3 : {'Arrow': 3}
-- dropped monkey in room 3 : {'monkey': 1, 'Arrow': 3}
dropping Arrow in room 6 : {'monkey': 1, 'Arrow': 10}
-- dropped Arrow in room 6 : {'monkey': 1, 'Arrow': 11}
taking Bow from room 5 : {'Apple': 1, 'Bow': 1}
-- took Bow from room 5 : {'Apple': 1}
taking Bow from room 4 : {'Arrow': 5}
-- Sorry, no Bow in room 4 to take
taking Bow from room 5 : {'Apple': 1}
-- Sorry, no Bow in room 5 to take

答案 2 :(得分:12)

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

这就是我所做的并且发现了:

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

    • 将以下内容添加到后者的pom.xml中: enter image description here
    • 在项目中添加如下Spring配置文件: enter image description here 这解决了STS中Web项目的不足。如果您现在运行该项目,您可以按如下方式访问H2控制台:http://localhost:8080/console enter image description here
  2. 现在在STS中创建一个SpringBatch项目如下(替代方法创建了一个不同的模板,缺少大多数类来保存数据。这个方法创建了2个项目:一个完成,以及其他初始。使用下面的完整。): enter image description here

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

答案 3 :(得分:4)

我遇到了这个问题。

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

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

enter image description here

答案 4 :(得分:2)

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

我尝试使用Generic H2(嵌入式)和Generic H2(服务器)选项,只要正确提供 JDBC URL :这两种选项都可以使用。

enter image description here

答案 5 :(得分:1)

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

答案 6 :(得分:0)

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

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

另外,我应该在schema.sql

中创建表时指定模式

答案 7 :(得分:0)

选择Generic H2(服务器)为我解决了。我们很想使用默认的Generic H2(嵌入式),这是错误的。

答案 8 :(得分:0)

如果在春季启动时使用maven依赖关系创建并填充了H2数据库表,那么在使用Web控制台连接到H2时,请务必将JDBC URL更改为jdbc:h2:mem:testdb

答案 9 :(得分:0)

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

  1. 例如,使用jdbc网址如下: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。它禁用了MVStore引擎,实际上,H2当前默认使用该引擎。
  8. 因此,请确保您的应用程序和IDE使用相同的存储引擎,因为MVStore和PageStore具有不同的file loyouts
  9. 请注意,如果应用程序由于锁定而无法使用数据库,则无法“连接”到数据库。另一种方法也适用。