【问题标题】:org.h2.jdbc.JdbcSQLException: Table not foundorg.h2.jdbc.JdbcSQLException:找不到表
【发布时间】:2022-06-22 16:30:01
【问题描述】:

我遇到了这个异常:

org.h2.jdbc.JdbcSQLException:
Table "CUSTOMERS" not found; SQL statement:
SELECT * FROM CUSTOMERS

这是 H2 控制台。我在那里创建了一个表:

我有 application.yml 文件。我也尝试添加 DB_CLOSE_DELAY=-1 和 DATABASE_TO_UPPER=false:

spring:
  database:
    url: jdbc:h2:mem:testdb
  h2:
    console.enabled: true

另外,我有一个配置类,我在其中创建了 H2 嵌入式数据库:

@Bean
public DataSource dataSource() {
    return new EmbeddedDatabaseBuilder().setType(EmbeddedDatabaseType.H2).build();
}

最后是查询。该表名为 CUSTOMERS:

public List<Customer> getAll() {
    return jdbcTemplate.query("SELECT * FROM CUSTOMERS", (resultSet, rowNum) -> {
        Customer customer = new Customer();
        customer.setId(resultSet.getLong("id"));
        customer.setName(resultSet.getString("name"));
        customer.setAge(resultSet.getInt("age"));
        return customer;
    });
}

我该怎么办?

【问题讨论】:

  • 如果将url: jdbc:h2:mem:testdb 更改为url: jdbc:h2:~/test 会发生什么?
  • 数据库不是叫“test”,不是叫“testdb”吗?
  • @Dai 我刚刚尝试过。同样的问题。
  • 如果使用绝对路径(而不是~-home-relative 路径)怎么办?即尝试/home/$you/test? Spring 在什么用户身份下运行? (这可以解释为什么~ 不起作用:您解析的~ 主路径与Spring 的~ 主路径不同)。 Spring 进程是否具有chmod 读取/写入文件的权限?此外,使用比 test 更具体的文件名 - 如果您使用更独特的名称(例如 mytesth2db),那么您可以更轻松地在文件系统中找到它。
  • @OldProgrammer,你是对的,默认名称是 testdb。我也试过了,还是有问题。

标签: java sql spring-boot yaml h2


【解决方案1】:

这几天我和你有同样的担忧。 我通过添加这个来解决它:

;TRACE_LEVEL_FILE=3;TRACE_LEVEL_SYSTEM_OUT=3

即:jdbc:h2:mem:testdb;TRACE_LEVEL_FILE=3;TRACE_LEVEL_SYSTEM_OUT=3

这有助于了解 H2 出现问题的原因。

通常是关键字问题。 您可以使用 NON_KEYWORDS 忽略它:https://www.h2database.com/html/commands.html#set_non_keywords

【讨论】:

    猜你喜欢
    • 2020-04-23
    • 2013-05-24
    • 1970-01-01
    • 2017-12-10
    • 1970-01-01
    • 2017-08-17
    • 1970-01-01
    • 2016-12-06
    • 2013-07-26
    相关资源
    最近更新 更多