我在存储库的方法中有这段SQL代码。它是根据给定的id查找项目的总价。这个价格应该返回一个BigDecimel总价,但是它给我一个错误SQL语法。当我把这个SQL放在我的MariaDB(phpMyAdmin)中时,它工作得很好。为什么这不起作用?
我在Spring存储库中使用Java。
@Override
public BigDecimal vindTotalePrijsByIds(Set<Long> ids) {
var sql = "select sum(prijs) from films where id in (" +
"?,".repeat(ids.size()-1) +
"?)";
return template.queryForObject(sql, BigDecimal.class, ids);
}
这些是列:(数据库没有问题,适用于所有其他语句)。但是你可以看到我取了正确的值。
id|genreId|标题|股票|保留|价格
我得到这个错误。
jdbc. BadSqlGrammarException:准备状态回调;坏SQL语法[select sum(prijs)从电影中的id在 (?,?)] ; 嵌套异常是java.sql.SQLException:没有为参数2指定值
我的SQL语句有什么问题?为了回答这个问题以验证是否有两个。是的,我用测试(查找id工作的公式)运行了它:
@Test
void findtotaleprijsbyids() {
long idEen = idVanTestFilm();
long idTwee = idVanTestFilmTwee();
assertThat(filmRepository.vindTotalePrijsByIds(Set.of(idTwee, idEen))).isEqualByComparingTo(BigDecimal.TEN);
}
将其插入我的数据库后,插入tFilm. sql(您可以假设我的测试一切都正确)
insert into films (genreId, titel, voorraad, gereserveerd, prijs) values (8, 'testFilm', 5, 0, 5.00),
(8, 'testFilmTwee', 5, 0, 5.00);
所以我知道它有两个参数。但是也许我执行错了。现在看那个方向。
调用的方法的签名是queryForObject(String query, Class
return template.queryForObject(sql, BigDecimal.class, ids.toArray());