删除适用于 PgAdmin 3 但不适用于 Java JDBC 的查询

Delete query working in PgAdmin 3 but not working on Java JDBC

我正在尝试删除保存在数据库中的时间列表,其中的日期(end_time - 时间戳)大于我为特定员工指定的参考日期(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);
        }


    }
}

我认为首先当条件总是为真时你应该:

首先:打印 nextDayTimestamp 并确保它有效

其次:如果有效则在 postgresql sql query

上尝试条件

如果来自该数据源的连接没有打开 AutoCommit,您的更新将成功,但 "transaction" 永远不会提交,因此数据库中不会反映您的更改。也许在 executeUpdate 之后放一个明确的 myConn.commit(); 并查看您的更新现在是否显示在数据库中。

我找到答案了!我从另一个我没有注意到的方法调用 "delete from employee where employeeId=?" 时犯了一个错误。这是一个更高的层次。这就是为什么它要删除所有员工。 我刚刚删除了那个方法,上面我的问题中提到的代码起作用了! 非常感谢您付出的努力和时间来帮助我!谢谢!