删除在PgAdmin 3中工作但不在Java JDBC上工作的查询

时间:2017-03-31 21:04:32

标签: java postgresql jdbc sql-delete

我正在尝试删除保存在数据库中的时间列表,其中日期(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);
        }


    }
}

sample of working_time table

3 个答案:

答案 0 :(得分:1)

我认为首先,条件总是正确的你应该:

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

第二:如果有效,请尝试postgresql sql查询条件

答案 1 :(得分:1)

如果来自该dataSource的Connection没有打开AutoCommit,您的更新将成功,但“事务”永远不会提交,因此数据库中的内容不会反映您的更改。也许在executeUpdate之后加上一个明确的myConn.commit();,看看你的更新现在是否显示在数据库中。

答案 2 :(得分:0)

我找到了答案!我在调用"从雇员中删除employeeId =?"从另一种方法,我没有注意到。它处于更高的水平。这就是它删除每个员工的原因。 我刚刚删除了那个方法,并且我上面提到的问题提到的代码! 非常感谢您努力和时间来帮助我!谢谢!