我已经从http://www.h2database.com/html/download.html下载了H2控制台
我已在jdbc.properties
文件中配置了网址
到jdbc:h2:c:/data/Messaging
。
我在文件中使用相同的URL连接到数据库,但我看不到表格;
我只能看到信息模式,当我尝试select * from tables
时,我也看不到这些表格。
有人知道可能出现什么问题吗?
答案 0 :(得分:18)
一个棘手的问题是,如果您尝试连接到不存在的JDBC URL,H2控制台不会给您错误。它将在该URL上创建一个新数据库!要连接到内存DB,请使用此JDBC URL(http://localhost:8080/h2-console是默认控制台):
jdbc:h2:mem:testdb
如果您要输入类似jdbc:h2:〜/ test的内容,则会在您的主目录下创建一个test.mv文件。但是您的应用程序仍将使用内存数据库。
如果你的pom中有h2依赖项,那么控制台是可用的,还有spring Developer tools依赖项。如果您没有工具依赖关系,那么您也可以通过拥有h2依赖关系并将以下内容添加到application.properties文件中来查看它:
spring.h2.console.enabled=true #not needed if you have spring-boot-devtools dependency
如果您希望将db作为文件而不是内存,请将以下内容添加到applications.properties:
spring.datasource.url=jdbc:h2:~/test_db #You will see the file in your home directory.
H2并不意味着持久化数据,但如果您想坚持进行测试,请添加:
spring.jpa.hibernate.ddl-auto = update
然后启动应用程序,并在控制台上使用此JDBC URL:
jdbc:h2:~/test_db
如果您想知道,我在application.properties中只有1个条目(对于数据库文件),这里是我的依赖项:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-rest</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
<groupId>com.h2database</groupId>
<artifactId>h2</artifactId>
</dependency>
答案 1 :(得分:10)
基于你的问题,看起来你不会成为这个特殊陷阱的受害者,但是这个帖子最终帮我解决了这个问题,所以我在这里为后代录制解决方案,因为它可以帮助其他人同样的问题。
我还发现,当我尝试使用H2控制台打开我的数据库时,我得到了一个看似空白的H2数据库(基本上只是一个INFORMATION_SCHEMA表)。在仔细检查我的数据库名称是否正确(mydb.mv.db
)的同时,我发现H2控制台创建了第二个数据库文件mydb.mv.db.mv.db
。奇
事实证明,H2控制台希望您从文件名中省略后缀.mv.db
。由于我没有,它正在寻找mydb.mv.db.mv.db
。将JDBC字符串更改为jdbc:h2:mydb
解决了问题,然后我可以从H2控制台打开文件。
答案 2 :(得分:9)
有同样的问题。
这解决了我: Why is my embedded h2 program writing to a .mv.db file
刚刚将;MV_STORE=FALSE
和;MVCC=FALSE
添加到jdbc网址,一切正常。
答案 3 :(得分:6)
这是使用h2模块启用内存启用数据库的方法。 您需要确保以下事项
spring.h2.console.enabled=true
localhost:8080/h2-console
JDBC URL:
- &gt;中输入以下更改jdbc:h2:mem:testdb
5.点击连接按钮萨拉姆
答案 4 :(得分:2)
我使用了下面的内容,我看到我的表已经创建了。
spring.datasource.url=jdbc:h2:mem:testdb;DB_CLOSE_ON_EXIT=FALSE
spring.h2.console.enabled=true
spring.h2.console.path=/h2console
spring.datasource.username=sa
spring.datasource.password=
spring.datasource.driverClassName=org.h2.Driver
spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.H2Dialect
答案 5 :(得分:0)
您还可以通过在H2控制台和Java代码之间使用相同的版本来避免此问题。
这就是我解决同一问题的方法here。
答案 6 :(得分:0)
在主类中添加注释@EntityScan(“ packageName”)
答案 7 :(得分:0)
我终于想出了如何查看默认的内存中 H2 数据库表。我分享这个解决方案是因为我认为由于安全问题,这个过程最近一定发生了变化。不再可能使用默认的 jdbc:h2:mem:testdb 来访问数据库,也不能通过 application.properties
行 spring 设置条目名称。 datasource.name=yourdbnamehere。
在撰写本文时,当应用程序启动时,会出现类似于以下内容的控制台消息:
2021-04-26 21:16:44.424 INFO 23142 --- [ restartedMain] o.s.b.a.h2.H2ConsoleAutoConfiguration : H2 console available at '/h2-console'. Database available at 'jdbc:h2:mem:6da7bb82-4008-4396-b825-09e44c17388b'
我使用的是 Spring Tool Suite 4。其他 IDE 可能会以不同的方式设置此消息。
关键部分是这个字符串的最后一部分,其中指定了数据库地址。数据库的标识符现在随着每次启动而变化。 (也许有办法抑制这个,但我不知道。)
我复制了地址jdbc:h2:mem:whatever-long-random-name,并将其粘贴到标有“JDBC URL”的 h2-console 登录表单字段中。进入后,点击或点击连接将显示数据库架构和控制台。
我正在学习的教程是 Dan Vega 的“Springit”应用程序,来自他的 Getting Started With Spring Boot 2.0 课程。我将此信息作为任何关注者的搜索面包屑包含在内。这门课程现在可能已经有几年的历史了,但 Vega 的解释工作比平均水平要好得多,所以它仍然值得。然而,随着技术的进步,我认为对增强安全性的需求已经增长到允许容易猜测的数据库名称不再安全的地步。