Csi*_*Csi -1 java database oracle jdbc resultset
我需要帮助才能知道为什么我的一份准备好的陈述没有被执行.这是代码:
准备好的声明:
updaterBalance = connection.prepareStatement("UPDATE accounts SET balance = ? WHERE account_id = ?")
Run Code Online (Sandbox Code Playgroud)
桌子 :
statmnt.executeUpdate("CREATE TABLE accounts ( account_id INTEGER, balance DOUBLE PRECISION)");
statmnt.executeUpdate("ALTER TABLE accounts ADD CONSTRAINT balance_must_be_positive CHECK (balance >= 0)");
Run Code Online (Sandbox Code Playgroud)
失败的方法:
public boolean transfer(int from, int to, double amount) throws DataStoreException {
try {
lookForAccount.setInt(1, to);
ResultSet result = lookForAccount.executeQuery();
if(result.next()) {
result.close();
lookForAccount.setInt(1, from);
ResultSet result2 = lookForAccount.executeQuery();
if(result2.next()) {
updaterBalance.setDouble(1, result2.getDouble("balance") - amount);
updaterBalance.setInt(2, from);
updaterBalance.executeUpdate();
result2.close();
updaterBalance.setDouble(1, result2.getDouble("balance") + amount);
updaterBalance.setInt(2, to);
updaterBalance.executeUpdate();
return true;
}
else {
return false;
}
}
else {
return false;
}
} catch (Exception error) {
error.printStackTrace();
return false;
}
Run Code Online (Sandbox Code Playgroud)
}
电话:
boolean a = manager.transfer(1, 2, 10);
Run Code Online (Sandbox Code Playgroud)
准备好的语句完全正常是一个addMoney方法,可以在单个指定的account_id上添加资金.在通话时,第一个account_id的余额为1000,第二个为0.我从未进入过if块.我根本无法满足条件.
任何的想法 ?
在对文件Statement说:
默认情况下,
ResultSet每个Statement对象只能同时打开一个对象.因此,如果一个ResultSet对象的读取与另一个对象的读取交错,则每个Statement对象必须由不同的对象生成.如果存在打开Statement的ResultSet对象,则接口中的所有执行方法都会隐式关闭该属性的当前对象.
这基本上意味着,因为你使用了相同的lookForAccount两个语句result和result2,result被关闭,所以result.next()不会返回true.
| 归档时间: |
|
| 查看次数: |
80 次 |
| 最近记录: |