java DAO更新查询失败

时间:2017-12-30 15:28:46

标签: java postgresql dao jdbi

我正在尝试编写DAO方法来更新postgres表中的值" accounts"只有两列: " ID"串 "平衡" 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:查询没有结果集,也许你的意思是更新? [声明:"更新帐户SET余额= 20 WHERE id =' 1';",位于:"更新帐户SET余额= 20 WHERE id =' 1& #39;;",重写:" UPDATE帐户SET balance = 20 WHERE id =' 1&#39 ;;",参数:{location:{},名称:{id :' 1'},finder:[]}]

知道问题是在查询语法中,还是使用DAO?

1 个答案:

答案 0 :(得分:0)

看起来您正在使用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();