Intellij嵌入H2数据库表不出现

pit*_*rok 10 database intellij-idea h2 spring-boot

我正在创建一个 Spring Boot 应用程序,并且正在使用 Intellij 的嵌入式 h2 数据库。

我在 application.properties 文件中添加了以下几行:

spring.datasource.url=jdbc:h2:~/testdb;MV_STORE=false;AUTO_SERVER=TRUE
Run Code Online (Sandbox Code Playgroud)

这是我的数据源配置 数据源配置

尽管连接成功并且我可以使用 Intellij 的查询控制台查询数据库,但这些表不会出现在“数据库”选项卡中。

Succeeded
DBMS: H2 (ver. 2.1.210 (2022-01-17))
Case sensitivity: plain=upper, delimited=exact
Driver: H2 JDBC Driver (ver. 2.1.210 (2022-01-17), JDBC4.2)
Ping: 16 ms
Run Code Online (Sandbox Code Playgroud)

数据库选项卡

当我刷新连接或转到数据源配置的架构选项卡时,出现以下错误:

[42S02][42102] org.h2.jdbc.JdbcSQLSyntaxErrorException: Table "INFORMATION_SCHEMA_CATALOG_NAME" not found; SQL statement: select CATALOG_NAME from INFORMATION_SCHEMA.INFORMATION_SCHEMA_CATALOG_NAME [42102-210].
Run Code Online (Sandbox Code Playgroud)

pit*_*rok 16

通过转到数据源的高级选项卡并单击专家选项,我们会看到一个标记为“使用 JDBC 元数据进行内省”的复选框

数据源高级选项卡

通过选中该框,表成功显示在“数据库”选项卡中

数据库选项卡

关于为什么会这样,这取自官方文档: https://www.jetbrains.com/help/datagrip/data-sources-and-drivers-dialog.html

使用 JDBC 元数据进行内省

切换到基于 JDBC 的内省器。适用于所有数据库。

为了检索有关数据库对象(数据库元数据)的信息,DataGrip 使用以下内省器:

本机内省器(对于某些 DBMS 可能不可用)。本机内省器使用特定于 DBMS 的表和视图作为元数据源。它可以检索特定于 DBMS 的详细信息并生成更精确的数据库对象图。

基于 JDBC 的内省器(可用于所有 DBMS)。基于 JDBC 的内省器使用 JDBC 驱动程序提供的元数据。它只能检索有关数据库对象及其属性的标准信息。

当本机内省器失败或不可用时,请考虑使用基于 JDBC 的内省器。

当您的数据库服务器版本低于 DataGrip 支持的最低版本时,本机内省器可能会失败。

您可以尝试切换到基于 JDBC 的内省器来解决从数据库检索数据库结构信息时出现的问题。例如,当数据库中存在的架构或架构级别以下的数据库对象未显示在数据库工具窗口中时。

  • 我已将官方文档添加到答案中。似乎是因为本机内省器由于某种原因失败(取决于具体情况),而基于 JDBC 的内省器使用 JDBC 驱动程序提供的元数据并成功显示数据库对象。 (3认同)
  • 它显示了看起来像内部 H2 表和视图的内容,但它仍然没有显示我由 `hibernate.hbm2ddl.auto=create-drop` 创建的表。 (2认同)