H2

Spring Boot 整合使用 H2 内存数据库

1、概览 本文将带你了解如何在 Spring Boot 中使用 H2 内存数据库。与其他数据库一样,Spring Boot 生态系统对 H2 提供了开箱即用的支持。 2、依赖 添加 h2 和 spring-boot-starter-data-jpa 依赖: <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-jpa</artifactId> </dependency> <dependency> <groupId>com.h2database</groupId> <artifactId>h2</artifactId> <scope>runtime</scope> </dependency> 3、Datasource 配置 默认情况下,Spring Boot 会配置应用使用用户名 sa 和空密码连接到内存数据库。 不过,你也可以通过在 application.properties 文件中添加以下属性来更改这些参数: spring.datasource.url=jdbc:h2:mem:testdb spring.datasource.driverClassName=org.h2.Driver spring.datasource.username=sa spring.datasource.password=password spring.jpa.database-platform=org.hibernate.dialect.H2Dialect 相应的 YAML 配置如下: spring: datasource: url: jdbc:h2:mem:mydb username: sa password: password driverClassName: org.h2.Driver jpa: spring.jpa.database-platform: org.hibernate.dialect.H2Dialect 内存数据库会在应用重启后会丢失数据,可以通过使用基于文件的存储来改变这种行为。 更新 spring.datasource.url 属性: spring.datasource.url=jdbc:h2:file:/data/demo 相应的 YAML 配置如下: spring: datasource: url: jdbc:h2:file:/data/demo H2 数据库还可以在 其他模式 下运行。

在 Spring Boot 中使用 H2 异常:JdbcSQLSyntaxErrorException

1、概览 在 Spring Boot 中使用 h2 作为内存数据库的时候遇到异常:org.h2.jdbc.JdbcSQLSyntaxErrorException: Syntax error in SQL statement expected “identifier”。 本文将会介绍出现 org.h2.jdbc.JdbcSQLSyntaxErrorException 的原因以及解决方案。 2、原因 通常,H2 会抛出 JdbcSQLSyntaxErrorException 来提示 SQL 语句中的语法错误。其中,“expected identifier” 信息表明 SQL 期望一个合适的 标识符,而我们没有给出。 导致这种异常的最常见原因是使用保留关键字作为标识符。 例如,使用关键字 table 来命名特定的 SQL 表就会导致 JdbcSQLSyntaxErrorException。 另一个原因是在 SQL 语句中缺少或错用了关键字。 3、重现异常 作为开发者,我们经常使用 user 一词来表示用户表。不幸的是,它在 H2 中是一个 保留关键字。 为了重现异常,我们将故意使用关键字 user。 因此,首先让我们添加一个基本的 SQL 脚本来初始化 H2 数据库并为其添加数据: INSERT INTO user VALUES (1, 'admin', 'p@ssw@rd'); INSERT INTO user VALUES (2, 'user', 'userpasswd'); 接下来,我们将创建一个实体(Entity)类来映射 user 表: