2011-09-13 7 views
1

私は形式のコラム "日付" とDate型を持つテーブルを持っている: "2011-09-06" と私はクエリを実行します:setDateを正しく使用するには?

select * from tvprograms where date=? 

そして、私はこれ試してみてください。

Date startDate; 
java.util.Date date; 
Calendar cal = Calendar.getInstance(); 
cal.set(2011, 9, 1); 
startDate = cal.getTime(); 
TVProgramDAO tvDAO = new TVProgramDAO(); 
tvDAO.findUnusedTvPrograms(new java.sql.Date(date.getTime())); 

をfindUnusedTvProgramsは次のようになります。

public List<Integer> findUnusedTvPrograms(Date date) { 
    List<Integer> results = new ArrayList<Integer>(); 
    if (obtainConnection()) { 
     PreparedStatement stmt = null; 
     ResultSet rs = null; 
     ... 
      stmt = con.prepareStatement(findOldTvProgQuery.toString()); 

      stmt.setDate(1, date); 
      rs = stmt.executeQuery(); 

      while (rs.next()) { 

       results.add(rs.getInt(1)); 
      ... 
    return results; 
} 

しかし、それは機能しません。

+7

"問題は解決しません"という問題は十分です。 –

+1

'Calendar.set(...)'に月の数字を見てみましょう。これはJavaベースで0ベースなので、9月= 9月ではなく、9月です。たとえば、Calendar.SEPTEMBERのように、数値の代わりに定数を使用します。 – Jesper

+0

あなたは正しいです:)ありがとう! –

答えて

2

このコードは、私の知る限りで開始するコンパイルされません。

Date startDate; 
java.util.Date date; 
Calendar cal = Calendar.getInstance(); 
cal.set(2011, 9, 1); 
startDate = cal.getTime(); 
TVProgramDAO tvDAO = new TVProgramDAO(); 
tvDAO.findUnusedTvPrograms(new java.sql.Date(date.getTime())); 

あなたはdateを使用しようとしているが、あなたは、変数を初期化したことがありません。それは良いアイデアではないかもしれないシステムのデフォルトのタイムゾーンを使用することを

Calendar cal = Calendar.getInstance(); 
cal.set(2011, 9, 1); 
Date startDate = cal.getTime(); 
TVProgramDAO tvDAO = new TVProgramDAO(); 
tvDAO.findUnusedTvPrograms(new java.sql.Date(startDate.getTime())); 

注:ここでは少しクリーナーバージョンです。個人的には、代わりにJoda Timeを使用することをお勧めします...

関連する問題