我正在尝试删除保存在数据库中的时间列表,其中日期(end_time - timestamp)大于特定员工的参考日(employeeId - 整数)。 该查询在pgAdmin III上完美运行。但是我无法在JDBC中使用它。 它有效,但它会删除该特定员工的所有内容,而不仅仅是我想要的日期。我看起来忽略了Where子句中的日期。另外,我没有任何例外。 变量nextDayTimestamp如下:'2017-03-31 12:00:00.0' 有人可以帮忙吗?
public void deleteBigListOfPeriodOfWorkFutureOnly(int employeeId, LocalDate referenceDate) {
Connection myConn = null;
PreparedStatement myStmt = null;
try {
myConn = dataSource.getConnection();
LocalDate nextDay = referenceDate.plusDays(1);
Timestamp nextDayTimestamp = Timestamp.valueOf(LocalDateTime.of(nextDay, LocalTime.NOON));
String sql = "delete from working_time where working_time.end_time > ? and employee_id = ?";
myStmt = myConn.prepareStatement(sql);
myStmt.setTimestamp(1, nextDayTimestamp);
myStmt.setInt(2, employeeId);
myStmt.executeUpdate();
} catch (SQLException e) {
e.printStackTrace();
} finally {
CloseConnection.close(myConn, myStmt, null);
}
}
}
答案 0 :(得分:1)
我认为首先,条件总是正确的你应该:
首先:打印nextDayTimestamp并确保它有效
第二:如果有效,请尝试postgresql sql查询条件
答案 1 :(得分:1)
如果来自该dataSource的Connection没有打开AutoCommit,您的更新将成功,但“事务”永远不会提交,因此数据库中的内容不会反映您的更改。也许在executeUpdate之后加上一个明确的myConn.commit();
,看看你的更新现在是否显示在数据库中。
答案 2 :(得分:0)
我找到了答案!我在调用"从雇员中删除employeeId =?"从另一种方法,我没有注意到。它处于更高的水平。这就是它删除每个员工的原因。 我刚刚删除了那个方法,并且我上面提到的问题提到的代码! 非常感谢您努力和时间来帮助我!谢谢!