##環境
MacOS Big Sur 11.1
STS 4-4.9.0
Spring Boot 2.4.2
Java 11
H2database 1 .4.200
Maven 4.0.0
##状況
Spring bootでh2を永続的に使用するためapplication.propertiesファイルを記述していました。
永続化するためファイルデータベースのパスを記述しDBを実行してみたところ
java.lang.IllegalStateException: Failed to execute CommandLineRunner Caused by: org.springframework.jdbc.BadSqlGrammarException: PreparedStatementCallback; bad SQL grammar [SELECT id, firstName, lastName from customers where id = ?]; nested exception is org.h2.jdbc.JdbcSQLSyntaxErrorException: テーブル "CUSTOMERS" が見つかりません Table "CUSTOMERS" not found;
というエラーが表示されました。
このエラーを解決したいです。
よろしくお願いします。
##ファイル
src/main/resources/application.properties
spring.datasource.driverClassName=org.h2.Driver spring.datasource.url=jdbc:h2:file:./target/db/testdb spring.datasource.username=sa spring.datasource.password=
src/main/resources/schema.sql
CREATE table IF NOT EXISTS customers ( id int PRIMARY KEY AUTO_INCREMENT, firstName VARCHAR(30), lastName VARCHAR(30) );
エントリポイント
package com.example.h2test; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.CommandLineRunner; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.jdbc.core.namedparam.MapSqlParameterSource; import org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate; import org.springframework.jdbc.core.namedparam.SqlParameterSource; import com.example.h2test.domain.Customer; @SpringBootApplication public class H2testApplication implements CommandLineRunner { @Autowired NamedParameterJdbcTemplate jdbcTemplate; @Override public void run(String...strings) throws Exception { String sql = "SELECT id, firstName, lastName from customers where id = :id"; SqlParameterSource param = new MapSqlParameterSource().addValue("id", 1); Customer result = jdbcTemplate.queryForObject(sql, param, (rs, rowNum) -> new Customer(rs.getInt("id"), rs.getString("firstName"), rs.getString("lastName") )); System.out.println("result: " + result); } public static void main(String[] args) { SpringApplication.run(H2testApplication.class, args); } }
pom.xml
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.4.2</version> <relativePath/> <!-- lookup parent from repository --> </parent> <groupId>com.example</groupId> <artifactId>h2test</artifactId> <version>0.0.1-SNAPSHOT</version> <name>h2test</name> <description>Demo project for Spring Boot</description> <properties> <java.version>11</java.version> </properties> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-jdbc</artifactId> </dependency> <dependency> <groupId>com.h2database</groupId> <artifactId>h2</artifactId> <scope>runtime</scope> </dependency> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <optional>true</optional> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <configuration> <excludes> <exclude> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> </exclude> </excludes> </configuration> </plugin> </plugins> </build> </project>
回答1件
あなたの回答
tips
プレビュー