【问题标题】:Spring Boot Database connection Table not foundSpring Boot 数据库连接表未找到
【发布时间】: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>

我创建了具有以下属性的 h2 数据库:

我在以下 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


【解决方案1】:

spring.datasource.url=jdbc:h2:mem:testdb 将此条目添加到您的 application.properties 文件中。

【讨论】:

  • 请在您的答案中加上解释,以提高您的答案的可理解性。
猜你喜欢
  • 2022-10-02
  • 2018-10-10
  • 2022-01-17
  • 1970-01-01
  • 1970-01-01
  • 2018-11-23
  • 2019-04-12
  • 2018-11-10
  • 2022-08-18
相关资源
最近更新 更多