我曾经遇到过同样的问题,答案似乎非常愚蠢:当您输入数据库名称时,不应添加.h2.db后缀。例如,如果您有名为D:\somebase.h2.db的db文件,您的连接字符串应该像jdbc:h2:file:/D:/somebase这样。否则,jdbc将创建一个名为somebase.h2.db.h2.db的新空数据库文件,并且你会看到你所看到的只是系统表。
现在在STS中创建SpringBatch项目,方法如下(另一种方法创建了一个不包含大部分持久化数据类的不同模板。此方法创建了两个项目:一个Complete,另一个是initial。在下面使用Complete):
我遇到了与您完全相同的问题。
根据您的描述,我认为您正在将jdbc与“真实”的h2服务器连接,但是您正在使用错误的模式(嵌入式内存模式,也称为 h2mem
)将Web应用程序连接到数据库。这意味着h2将在内存中创建一个新的数据库,而不是使用其他地方存储的真实数据库。
请确保在连接到此数据库时,您使用模式通用H2(服务器),而不是通用H2(嵌入式)模式。您可以参考下面的图片。
对于使用嵌入式(持久化模式)H2并想要从IntelliJ连接到它的人(其他IDE可能也适用)。
jdbc:h2:./database.h2
./
jdbc:h2:/Users/me/projects/MyAwesomeProject/database.h2
;MV_STORE=false
。它禁用了当前默认在H2中使用的MVStore引擎。jar文件的版本和安装的h2数据库版本应该相同。
jdbc:h2:mem:testdb
。请注意,本文不提供解释。保留HTML标记。dataSource.setUsername("sa");
dataSource.setPassword("");
另外,在 schema.sql 中创建表时,我应该指定模式。