看起来数据已绑定到参数,但是在H2控制台中SELECt * FROM GAME不返回任何内容。该表不存在。
您正在使用
in-memoryH2 的实例:
spring.datasource.url=jdbc:h2:mem:test;DB_CLOSE_DELAY=-1
在这种模式下,您无法从启动
in-memory数据库的另一个客户端看到更改的内容 。
要查看其他客户端的更改,您必须使用TCP模式。
您有两种解决方案:
- 使用文件保留H2实例。
数据库文件存储在哪里?
使用jdbc:h2:〜/ test之类的数据库URL时,数据库存储在用户目录中。对于Windows,通常为C: documents and
Settings 或C: Users 。如果未设置基本目录(如在jdbc:h2:./
test中),则数据库文件存储在启动应用程序的目录(当前工作目录)中。从开始菜单使用H2控制台应用程序时,该目录为/
bin。可以在数据库URL中设置基本目录。可以使用固定或相对路径。使用URL jdbc:h2:file:./ data /
sample时,数据库存储在目录数据中(相对于当前工作目录)。如果该目录尚不存在,则会自动创建。也可以使用完全限定的目录名(对于Windows,则为驱动器名)。示例:jdbc:h2:file:C:/
data / test
- 继续使用内存中的实例,但使用TCP模式。
更换:
spring.datasource.url=jdbc:h2:mem:test;DB_CLOSE_DELAY=-1
创建人:
spring.datasource.url=jdbc:h2:tcp://localhost/~/test
通常,在我真的想知道数据库中插入了哪个时,我在JPA实体单元测试期间切换到此模式。
从官方文档中:
内存数据库
对于某些用例(例如:快速原型制作,测试,高性能操作,只读数据库),可能不需要保留数据或保留对数据的更改。该数据库支持内存模式,在该模式下数据不会持久保存。…
在某些情况下,仅需要与内存数据库的一个连接。这意味着要打开的数据库是私有的。在这种情况下,数据库URL为jdbc:h2:mem:在同一虚拟机中打开两个连接意味着打开两个不同的(专用)数据库。
有时需要到同一内存数据库的多个连接。在这种情况下,数据库URL必须包含一个名称。示例:jdbc:h2:mem:db1。使用此URL访问相同的数据库仅在相同的虚拟机和类加载器环境中有效。
要从另一个进程或另一台计算机访问内存数据库,您需要以与创建内存数据库相同的过程来启动TCP服务器。
然后,其他进程需要使用数据库URL,例如jdbc:h2:tcp:// localhost / mem:db1,通过TCP /
IP或TLS访问数据库。
独立H2控制台的替代方法:使用可从Spring Boot应用程序访问的H2控制台
实际上,H2数据库提供了一个基于浏览器的控制台,Spring Boot可以为您自动配置该控制台。满足以下条件时,将自动配置控制台:
- 您正在开发基于servlet的Web应用程序。
- com.h2database:h2在类路径上。
- 您正在使用Spring Boot的开发人员工具。
因此,这意味着只能在dev中访问。通常您想要什么。
默认情况下,控制台位于
/h2-console。
设置
spring.h2.console.path属性以更改该设置。



