我正在尝试执行一个更新,内容如下:
如果当前时间晚于拍卖结束时间(即非活动),则将表拍卖
的状态
列设置为0
。否则,设置为“1”。
rs = st.executeQuery("select * from auctions");
System.out.println("### TESTING DATETIMES ####");
while(rs.next()){
Timestamp start = rs.getTimestamp("startdatetime");
Timestamp current = Timestamp.valueOf(LocalDateTime.now().format(formatter));
Timestamp end = rs.getTimestamp("enddatetime");
int auctionID = rs.getInt("aucID");
System.out.println(start);
System.out.println(current);
System.out.println(end);
boolean inactive = current.after(end);
System.out.println(inactive);
if(current.after(end)){
System.out.println("Inactive");
st.executeUpdate("UPDATE auctions SET status='inactive' WHERE aucID=" + auctionID);
}else{
System.out.println("Active");
st.executeUpdate("UPDATE auctions SET status='active' WHERE aucID=" + auctionID);
}
}
我一直在犯这个错误。。
javax。servlet。ServletException:java。sql。SQLException:结果集关闭后不允许操作
我怎么去修理这样的东西?
尝试使用ResultSet
后使用执行更新()
。将拍卖ID
分配给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);
}
您甚至不需要在此处执行select,您可以执行单个update语句:
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();
我试图弄清楚是否有可能在<代码> 更具体地说,我有几个多模块项目继承了我们公司范围内的母公司pom。在<代码> 在对一个儿童项目进行了数小时的实验后,我想: 避免在所有模块中执行不必要的拷贝回写,当我在父POM中定义执行拷贝回写时会发生这种情况,并且有在所有模块中创建目标文件夹层次结构的缺点 避免在父POM中未定义执行的情况下,在需要的所有模块中的多个克隆副本中定义执行 一个示例子项目包含以下模块
问题内容: 我一直在尝试更新特定行已有一段时间了,看来有两种方法可以做到这一点。根据我的阅读和尝试,你可以使用: 方法 或者: 方法。 (让我知道这是否不正确,因为我是android新手,还是SQL新手。) 因此,让我了解我的实际代码。 我正在努力做到这一点: 更新主键()等于1的Field1,Field2和Field3。 Eclipse在“更新”一词的正下方给了我一条红线,并给出了以下解释: S
问题内容: 我在src / test / resources / feature /中有以下功能文件(单独的功能文件),我想并行运行它们。就像:一个功能文件必须在chrome中执行,而另一个功能文件必须在firefox中执行,如@Tags名称所述。 有人可以帮助我实现这一点吗?我使用的是cumul-java 1.2.2版本,并且使用AbstractTestNGCucumberTests作为运行程序
我将JRE7与Apache POI3.7一起使用。有人能帮我用事件API获得特定的行吗?
问题内容: 我正在为jQuery日期选择器插件创建AngularJS指令,当日期选择器日期更改时,该插件应更新ng-model。 这是到目前为止的代码: 考虑到在调用事件时范围,元素,属性,ngModel不可用,如何在“ dp.change”事件中更新ngModel? 谢谢! 问题答案: 可以肯定的是,已添加到angular的任何插件都不会更新angular范围的,我们需要在它的jquery ch
问题内容: 给出: 给出: 是否有准备使用的库/代码来完成它? 问题答案: 您将无法使用JSON.stringify序列化事件对象,因为事件对象包含对DOM节点的引用,并且DOM在各处都有循环引用(例如,子/父关系)。JSON默认情况下无法处理这些,因此您有点不走运。