【发布时间】:2018-09-23 21:50:11
【问题描述】:
我正在开发我的第一个 Spring Boot 应用程序,但我遇到了数据库连接问题。
我正在使用 maven 4.0.0,我想使用 JdbcTemplate 对数据库(H2)进行操作。我尝试在资源文件夹中创建的 application.properties 文件中配置数据库访问权限。
这是我的 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 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>obudb2</groupId>
<artifactId>boudb2</artifactId>
<version>1.0-SNAPSHOT</version>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.0.1.RELEASE</version>
</parent>
<properties>
<java.version>1.8</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId> <!--todo: change to starter-jdbc!-->
</dependency>
<dependency>
<groupId>com.h2database</groupId>
<artifactId>h2</artifactId>
<version>1.0.60</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
我在以下 dao 类中访问数据库:
@Repository
public class CustomerDaoImpl implements CustomerDao {
private String selectAllStatement = "select * from Customer";
@Autowired
private JdbcTemplate jdbcTemplate;
@Override
public List<Customer> findAllCustomers() {
return jdbcTemplate.query(selectAllStatement,new CustomerMapper());
}
}
我的 application.properties 文件如下所示:
spring.datasource.url=jdbc:h2:mem:sourceDb
spring.datasource.username=admin
spring.datasource.driver-class-name=org.h2.Driver
我收到以下错误:
Caused by: org.springframework.jdbc.BadSqlGrammarException: StatementCallback; bad SQL grammar [select * from CUSTOMER]; nested exception is org.h2.jdbc.JdbcSQLException: Tabelle CUSTOMER nicht gefunden
Table CUSTOMER not found; SQL statement:
select * from CUSTOMER [42S02-60]
at org.springframework.jdbc.support.SQLErrorCodeSQLExceptionTranslator.doTranslate(SQLErrorCodeSQLExceptionTranslator.java:234) ~[spring-jdbc-5.0.5.RELEASE.jar:5.0.5.RELEASE]
at org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:72) ~[spring-jdbc-5.0.5.RELEASE.jar:5.0.5.RELEASE]
at org.springframework.jdbc.core.JdbcTemplate.translateException(JdbcTemplate.java:1402) ~[spring-jdbc-5.0.5.RELEASE.jar:5.0.5.RELEASE]
at org.springframework.jdbc.core.JdbcTemplate.execute(JdbcTemplate.java:388) ~[spring-jdbc-5.0.5.RELEASE.jar:5.0.5.RELEASE]
at org.springframework.jdbc.core.JdbcTemplate.query(JdbcTemplate.java:446) ~[spring-jdbc-5.0.5.RELEASE.jar:5.0.5.RELEASE]
at org.springframework.jdbc.core.JdbcTemplate.query(JdbcTemplate.java:456) ~[spring-jdbc-5.0.5.RELEASE.jar:5.0.5.RELEASE]
at dao.CustomerDaoImpl.findAllCustomers(CustomerDaoImpl.java:25) ~[classes/:na]
at dao.CustomerDaoImpl$$FastClassBySpringCGLIB$$c0781898.invoke(<generated>) ~[classes/:na]
at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:204) ~[spring-core-5.0.5.RELEASE.jar:5.0.5.RELEASE]
at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.invokeJoinpoint(CglibAopProxy.java:747) ~[spring-aop-5.0.5.RELEASE.jar:5.0.5.RELEASE]
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163) ~[spring-aop-5.0.5.RELEASE.jar:5.0.5.RELEASE]
at org.springframework.dao.support.PersistenceExceptionTranslationInterceptor.invoke(PersistenceExceptionTranslationInterceptor.java:139) ~[spring-tx-5.0.5.RELEASE.jar:5.0.5.RELEASE]
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:185) ~[spring-aop-5.0.5.RELEASE.jar:5.0.5.RELEASE]
at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:689) ~[spring-aop-5.0.5.RELEASE.jar:5.0.5.RELEASE]
at dao.CustomerDaoImpl$$EnhancerBySpringCGLIB$$da434872.findAllCustomers(<generated>) ~[classes/:na]
at service.TransferService.transferData(TransferService.java:26) ~[classes/:na]
at main.ObuDbTransfer.run(ObuDbTransfer.java:34) [classes/:na]
at org.springframework.boot.SpringApplication.callRunner(SpringApplication.java:797) ~[spring-boot-2.0.1.RELEASE.jar:2.0.1.RELEASE]
我认为数据源可能有问题。也许它没有正确链接,但据我了解,spring boot 应该自动从 application.properties 文件中生成一个数据源。所以我不知道这里可能出了什么问题。 我希望有人能指出我在这里遗漏了什么。
【问题讨论】:
-
spring.datasource.password=
-
我将 spring.datasource.password= 添加到我的属性文件中,但我仍然面临这个问题。
-
你也应该加上
spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.H2Dialect。 -
@hiaslosch17 只是一个问题,您确定该表真的存在吗?
-
似乎每次我关闭 h2 控制台时,所有表都会被删除。我第一次面对这个问题,在我以不同的顺序尝试使用不同的数据库名称之前,这并没有发生。
标签: java spring-boot jdbctemplate