删除适用于 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=?" 时犯了一个错误。这是一个更高的层次。这就是为什么它要删除所有员工。
我刚刚删除了那个方法,上面我的问题中提到的代码起作用了!
非常感谢您付出的努力和时间来帮助我!谢谢!
我正在尝试删除保存在数据库中的时间列表,其中的日期(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=?" 时犯了一个错误。这是一个更高的层次。这就是为什么它要删除所有员工。 我刚刚删除了那个方法,上面我的问题中提到的代码起作用了! 非常感谢您付出的努力和时间来帮助我!谢谢!