2017-11-15 18 views
-2

私はpostgresそれをデータベースに挿入する以下のようなプリペアドステートメントを持っている:データを挿入する特定の日付まで日付を増やす方法はありますか?

String InsertQuery="INSERT INTO public.user_daily_activity (id,user,day,time) 
values (?,?,?,?)"; 
String date="2017-11-16"; 
try{ 
    jtmTemplate.update(InsertQuery, new PreparedStatementSetter() { 
    public void setValues(PreparedStatement preparedStatement) throws SQLException { 
    preparedStatement.setInt(1, id); 
    preparedStatement.setString(2, user); 
    preparedStatement.setDate(3, java.sql.Date.valueOf(date)); 
    preparedStatement.setInt(4, time); 

} 

は、だから今、私は日付= "2017-11-16"たとえば11月30日に開始日からそれをインクリメントする必要がある日付に応じて、私は"2017-11-16" to "2017-11-30"から挿入する必要があります。 date = "2017-11-27"の場合は、"2017-11-27"から"2017-11-30"に挿入する必要があります。

何か助けていただければ幸いです。

+4

プリペアドステートメントでそれをしないでください。あなたのJavaコードでそれを行う – Jens

+0

どういう意味ですか?もし私が間違っていないなら、準備されたステートメントをループに入れてください。 – Ricky

+1

いいえ間違っていません。しかし、あなたが尋ねる*準備された声明でそれを行う方法* – Jens

答えて

1

さて、ここであなたは、事前java8 DateCalendarを使用して解決策を持っている:

public void incrementDate() { 
    int dayLimit = 30; 
    // month is zero-based index 
    int monthLimit = 10; 
    String startStringDate = "2017-11-16"; 
    DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd"); 
    Calendar calendar = Calendar.getInstance(); 
    Date startDate; 
    java.sql.Date sqlDate; 
    try { 
     startDate = dateFormat.parse(startStringDate); 
     calendar.setTime(startDate); 
     while(calendar.get(Calendar.DAY_OF_MONTH) <= dayLimit && calendar.get(Calendar.MONTH) <= monthLimit) { 
      sqlDate = new java.sql.Date(startDate.getTime()); 
      // here just use sqlDate in your prepared statement 
      //... 
      //e.g. preparedStatement.setDate(3, sqlDate); 
      // ... 
      System.out.println("Using sql date : " + sqlDate); 
      calendar.setTime(startDate); 
      calendar.add(Calendar.DATE, 1); 
      startDate = calendar.getTime(); 
     } 
    } catch (ParseException e) { 
     e.printStackTrace(); 
    } 
} 
関連する問題