我正在尝试执行更新:
如果当前时间晚于拍卖结束时间(即无效),则将表status
的{{1}}列设置为auctions
。否则,请设置为“ 1”。
0
我一直收到此错误。
javax.servlet.ServletException:java.sql.SQLException:操作不正确 ResultSet关闭后允许使用
我该如何解决类似问题?
答案 0 :(得分:1)
您甚至不需要在此处进行选择,您可以执行一条更新语句:
UPDATE auctions
SET status = CASE WHEN enddatetime < NOW()
THEN 'inactive'
ELSE 'active' END
WHERE aucID = <some ID>;
但是,我通常建议不要使用这种方法,因为活动/不活动标签是派生数据,可能不会插入。相反,您可能被迫多次运行此更新,这不是最佳选择。相反,您可以在需要时选择此标签。
您得到的确切错误是由于在关闭ResultSet
之后尝试使用它。我的建议应消除这种情况,因为这样一来,您只需要更新一次即可:
String sql = "UPDATE auctions SET status = CASE WHEN enddatetime < NOW() ";
sql += "THEN 'inactive' ELSE 'active' END WHERE aucID = ?";
PreparedStatement ps = conn.prepareStatement(sql);
ps.setInt(1, 123);
ps.executeUpdate();
答案 1 :(得分:0)
在使用executeUpdate()
之后尝试使用ResultSet
。将auctionID
分配给ArrayList
,然后对其进行迭代。
ArrayList<Integer> inactiveIDs = new ArrayList(), activeIDs = new ArrayList();
while(rs.next()){
...
if(current.after(end)){
System.out.println("Inactive");
inactiveIDs.add(auctionID);
}else{
System.out.println("Active");
activeIDs.add(auctionID);
}
}
for(Integer auctionID: inactiveIDs){
st.executeUpdate("UPDATE auctions SET status='inactive' WHERE aucID=" + auctionID);
}
for(Integer auctionID: activeIDs){
st.executeUpdate("UPDATE auctions SET status='active' WHERE aucID=" + auctionID);
}