javaDAO 更新查询失败
java DAO update query failure
我正在尝试编写 DAO 方法来更新 postgres table "accounts" 中的值,只有两列:
"id" 字符串
"balance" 整数
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 accounts SET balance=20 WHERE id='1';",定位:"UPDATE accounts SET balance=20 WHERE id='1';",重写:"UPDATE accounts SET balance=20 WHERE id='1';",参数:{ 位置:{},命名:{id:'1'},查找器:[]}]
是否知道问题出在查询语法或 DAO 的使用中?
看起来您正在使用 JDBI。根据文档,可以通过Handle.execute()
执行SQL UPDATE,如下:
h.execute("UPDATE accounts SET balance=? WHERE id=?", balance.intValue(), id);
但是 execute 方法没有 return 结果集,因此不能用于创建 Account
对象。您需要发出一个单独的查询来执行此操作,可能类似于
return h.createQuery("SELECT id, balance FROM accounts WHERE id = :id")
.bind("id", id)
.mapTo(Account.class)
.first();
我正在尝试编写 DAO 方法来更新 postgres table "accounts" 中的值,只有两列: "id" 字符串 "balance" 整数
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 accounts SET balance=20 WHERE id='1';",定位:"UPDATE accounts SET balance=20 WHERE id='1';",重写:"UPDATE accounts SET balance=20 WHERE id='1';",参数:{ 位置:{},命名:{id:'1'},查找器:[]}]
是否知道问题出在查询语法或 DAO 的使用中?
看起来您正在使用 JDBI。根据文档,可以通过Handle.execute()
执行SQL UPDATE,如下:
h.execute("UPDATE accounts SET balance=? WHERE id=?", balance.intValue(), id);
但是 execute 方法没有 return 结果集,因此不能用于创建 Account
对象。您需要发出一个单独的查询来执行此操作,可能类似于
return h.createQuery("SELECT id, balance FROM accounts WHERE id = :id")
.bind("id", id)
.mapTo(Account.class)
.first();