StatementCallback;仅当部署到Heroku时SQL语法错误

时间:2019-05-19 15:50:27

标签: java spring-boot heroku jdbc jdbctemplate

我已经创建了使用jdbctemplate的spring-boot应用程序,一切在localhost上都运行良好,但是当我将应用程序部署到Heroku并访问端点时,我会得到以下信息:

StatementCallback; bad SQL grammar [SELECT id, name, price, image, description FROM products;]; nested exception is org.postgresql.util.PSQLException: ERROR: relation "products" does not exist Position: 49

如果SQL查询错误,那么同一应用程序在本地计算机上怎么可能?

这是我正在使用的jdbcTemplate方法:

public Products getProductsList() {
    ArrayList<Product> productsList = new ArrayList<>();

    jdbcTemplate.query(
            "SELECT id, name, price, image, description FROM public.products;",
            (rs, rowNum) -> new Product(rs.getInt("id"), rs.getString("name"), rs.getFloat("price"), rs.getString("image"), rs.getString("description"))
    ).forEach(product -> productsList.add(product));

    return new Products(productsList);
}

3 个答案:

答案 0 :(得分:0)

我认为您应该像这样将架构名称放在 application.properties 文件中:

spring.jpa.properties.hibernate.default_schema=public

然后像这样编写查询:

SELECT id, name, price, image, description FROM products;

来源:this answerthis answer

答案 1 :(得分:0)

您将需要使用https://devcenter.heroku.com/articles/running-database-migrations-for-java-apps

中所述的迁移框架来创建表

答案 2 :(得分:0)

好的,我修好了。

Heroku出于某种原因(与Postgresql一起添加)将自己的配置添加到了我的项目中,并且它使用了settings-> config vars-> DATABASE_URL中的数据库,而不是application.properties中的数据库。

I used command from this answer在Heroku CLI中从我的应用程序中删除heroku数据库。