2017-03-31 10 views
2

特定の従業員(employeeId - 整数)の日付(end_time - timestamp)が基準日よりも大きいデータベースに保存された時間のリストを削除しようとしています。 )。 クエリはpgAdmin IIIで完全に機能します。しかし、私はそれをJDBCで動作させることはできません。 それは動作しますが、私はその特定の従業員から、すべてのものを削除します。 Where節の日付は無視されるようです。また、例外はありません。 変数nextDayTimestampは次のようになります: '2017-03-31 12:00:00.0' 誰かが助けてくれますか?PgAdmin 3で動作しているがJavaで動作していないクエリを削除する

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

DataSourceから出てくるConnectionにAutoCommitがオンになっていない場合、更新は成功しますが、 "トランザクション"は決してコミットしないので、データベースには変更が反映されません。そのexecuteUpdateの後に明示的にmyConn.commit();を入れて、あなたのアップデートがデータベースに現れているかどうかを確認してください。

+0

executeUpdateの後にmyConn.commit()を試しましたが、AutoCommitがオンになっているというエラーが出ました。 – evzpav

関連する問題