2017-03-31 60 views
2

我想删除数据库中保存的时间列表,其中日期(end_time - timestamp)大于特定员工的参考日期(employeeId - 整数)。 该查询在pgAdmin III上完美工作。但是我无法使它在JDBC中工作。 它可以工作,但会删除特定员工的所有内容,而不仅仅是我想要的日期。我看起来像忽略了Where子句中的日期。另外,我没有任何例外。 变量nextDayTimestamp出来就像:'2017-03-31 12:00:00.0' 任何人都可以请帮忙吗?删除在PgAdmin 3中工作但在Java JDBC上不工作的查询

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

+0

什么是数据库中的'end_time',时间戳或日期时间? –

+0

我想第一个条件总是如此,就像@ GuillaumeF.said一样,它可能与类型有关。 –

+0

@GuillaumeF。 end_time是没有时区的时间戳。 – evzpav

回答

0

我找到了答案!我犯了一个错误,称“从员工删除employeeId =?”从另一个我没有注意到的方法。这是在一个更高的水平。这就是为什么它会删除每个员工。 我刚刚删除了这个方法和上面提到的我的问题中提到的代码,现在可以运行! 非常感谢努力和时间帮助我!谢谢!

1

我想首先这里的条件始终是真实的,你应该:

一:打印nextDayTimestamp,并确保它是有效的

第二:如果它是有效的尝试条件上postgresql SQL查询

+0

nextDayTimestamp就像'2017-03-31 12:00:00.0'。我用它作为字符串连接来检查它是否可以工作,但我得到了相同的结果。它从该员工的数据库中删除所有内容,忽略日期。 – evzpav

+0

尝试将2个变量转换为相同类型,例如不带时间戳的日期,然后再试一次 –

1

如果来自该数据源的连接没有启用AutoCommit,您的更新会成功,但“交易”永远不会提交,因此在数据库中不会反映您的更改。也许在executeUpdate之后加上一个明确的myConn.commit();,看看你的更新现在是否显示在数据库中。

+0

我尝试过在executeUpdate之后执行myConn.commit(),但我得到了AutoCommit发生的错误。 – evzpav

相关问题