@SpringBootApplication
public class DatabaseDemoApplication implements CommandLineRunner {
private Logger logger = LoggerFactory.getLogger(this.getClass());
@Autowired
PersonJbdcDao dao;
public static void main(String[] args) {
SpringApplication.run(DatabaseDemoApplication.class, args);
}
@Override
public void run(String... args) throws Exception {
// Thread.sleep(1000); --------------------------------------------------> line 1
logger.info("All users -> {}", dao.findAll());
}
}
@Repository
public class PersonJbdcDao {
@Autowired
JdbcTemplate jdbcTemplate;
public List<Person> findAll() {
return jdbcTemplate.query("select * from person",
new BeanPropertyRowMapper<Person>(Person.class));
}
}
In pom.xml
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.3.1.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
Я использую базу данных h2. Ниже приводится application.properties
spring.jpa.database-platform=org.hibernate.dialect.H2Dialect
spring.h2.console.enabled=true
spring.datasource.url=jdbc:h2:mem:testdb
spring.datasource.driverClassName=org.h2.Driver
spring.datasource.username=sa
spring.datasource.password=
Person.class
private int id;
private String name;
private String location;
private Date birthDate;
// getter and setter
У меня также есть файл data.sql
в папке ресурсов, в котором есть операторы создания и вставки. Если я сохраню строку 1 (Thread.sleep (1000)), прокомментировал и запустил проект, я столкнулся с ошибкой, но я могу получить доступ к таблице Person через консоль h2
java.lang.IllegalStateException: Failed to execute CommandLineRunner
Caused by: org.springframework.jdbc.BadSqlGrammarException: StatementCallback; bad SQL grammar [select * from person]; nested exception is org.h2.jdbc.JdbcSQLSyntaxErrorException: Table "PERSON" not found; SQL statement:
select * from person [42102-200]
Caused by: org.h2.jdbc.JdbcSQLSyntaxErrorException: Table "PERSON" not found; SQL statement:
select * from person [42102-200]
У меня есть 2 сценария ios
- Если я оставлю комментарий к строке 1 и переименую
data.sql
файл в schema.sql
файл, все будет работать отлично. Я могу получить доступ, почему это? - Если я сохраню файл
data.sql
и не переименую его, мне придется раскомментировать строку 1, чтобы приложение заработало. Почему?