我正在尝试编写DAO方法来更新postgres表“accounts”中的值,只有两列:“id”string“balance”int
public Account setAccountBalance(String id, Integer balance) {
Handle h = dbi.open();
try{
return h.createQuery("UPDATE accounts SET balance=" + balance.intValue() +
" WHERE id=\'" + id +"\';")
.mapTo(Account.class)
.first();
} finally {
h.close();
}
}
但是在执行时我看到以下异常:org.skife.jdbi.v2.exceptions.NoResultsException:查询没有结果集,也许你的意思是更新? [声明:“UPDATE帐户SET余额= 20 WHERE id ='1';”,位于:“UPDATE帐户SET余额= 20 WHERE id ='1';”,重写:“UPDATE accounts SET balance = 20 WHERE id =' 1';“,参数:{position:{},名称:{id:'1'},finder:[]}]
知道问题是在查询语法中,还是使用DAO?
看起来你正在使用JDBI。根据文档,SQL UPDATE可以通过Handle.execute()
执行,如下所示:
h.execute("UPDATE accounts SET balance=? WHERE id=?", balance.intValue(), id);
但execute方法不返回结果集,因此不能用于创建Account
对象。你需要发出一个单独的查询来做这件事,也许是这样的
return h.createQuery("SELECT id, balance FROM accounts WHERE id = :id")
.bind("id", id)
.mapTo(Account.class)
.first();