我有一个名为delegateeinfo的数据库表。 我想检索3列中的值,即Username,Duration和EndDate。 检索此值的目的是执行日期时间计算以检查剩余的假期持续时间并更新到数据库中。 但我无法从表中检索所有数据,我只能得到第一行。知道如何让所有数据执行计算并更新回来吗? 我尝试了很多,但仍然无法得到解决方案。 下面是我的代码的一些示例:
try{
String sql = "select Username,EndDate,Duration from delegateinfo";
pst = connection.prepareStatement(sql);
rs=pst.executeQuery();
if(rs.next()){
String name = rs.getString("Username");
String enddate = rs.getString("EndDate");
String duration = rs.getString("Duration");
LocalDateTime today = LocalDateTime.now(ZoneId.systemDefault());
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
LocalDateTime convertEnd = LocalDateTime.from(LocalDate.parse(enddate, formatter).atStartOfDay());
Duration g = Duration.between(today, convertEnd);
if(g.isNegative()){
System.out.println("Delete user from database since holiday duration is ended.");
}else{
System.out.println("The user still have " +g.toDays()+ " days remaining, update into database");
}
}
}catch(Exception e){
JOptionPane.showMessageDialog(null, e);
}
答案 0 :(得分:1)
从文档中,ResultSet对象的.next()方法是:
将光标从当前位置向前移动一行。
在代码if(rs.next())中,光标只移动一次,因此您只能检索第一行。您可以将if(rs.next())更改为while(rs.next())以从表中检索所有记录。这是一个例子:
while(rs.next()){
String name = rs.getString("Username");
String enddate = rs.getString("EndDate");
String duration = rs.getString("Duration");
...
}
详细示例由java doc提供,您可以在此处找到它: Retrieving and Modifying Values from Result Sets
要更新表,您可以先检索所有记录,将它们存储为模型对象的ArrayList。之后,您可以执行计算,使用prepare语句进行更新。请记住使用事务进行更新。要使用事务并将值更新到记录,可以按照java doc:Committing Transactions
中的示例进行操作我希望这会对你有所帮助。