2012-01-20 8 views
0

私はJava JDBCを使い慣れていません。私は、2つのOracle DATE値の間でSELECTを実行するためにJDBCのpreparedstatementを作成しようとしています。 私はこれらの2つの時間の間にデータが存在することを知っています。私は直接クエリを実行できます。JDBC setDateはpreparedstatementで動作しません

ただし、JDBCコード内からprepared statementを実行すると、0行が返されます。

私の入力開始時刻と時刻は、ミリ秒単位の長いUnix時間値です。

私は最低限にコードをダウン削り取っしようとしてい

public static List<Oam1731Sam5Data> getData(Long startTime, Long endTime) { 
    try { 
     String query = "SELECT timecaptured from oam1731data5 " + 
      "WHERE timecaptured between ? and ?"; 

     pstmt = conn.prepareStatement(query); // create a statement 

     Date javaStartDate = new Date(startTime); 
     Date javaEndDate = new Date(endTime); 

     pstmt.setDate(1, javaStartDate); 
     pstmt.setDate(2, javaEndDate); 

     ResultSet rs = pstmt.executeQuery(); 

     while (rs.next()) { 
      String serviceId = rs.getString("SERVICEID"); 
      String recordSource = rs.getString("RECORDSOURCE"); 
      Date timeCaptured = rs.getDate("TIMECAPTURED"); 
      Long oneWayMaxDelay = rs.getLong("ONEWAYMAXDELAY"); 
      Long twoWayMaxDelay = rs.getLong("TWOWAYMAXDELAY"); 
      Long twoWayMaxDelayVar = rs.getLong("TWOWAYMAXDELAYVAR"); 
      Long packetLoss = rs.getLong("PACKETLOSS"); 
     } 

    } catch (SQLException se) { 
     System.err.println("ERROR: caught SQL exception, code: " + se.getErrorCode() + 
       ", message: " + se.getMessage()); 
    } 

問題は、これは同じクエリがデータを返す0行、返すことです:

選択insert_date、レコード、サービスIDを( '2012-01-18 07:00:00'、 'YYYY-MM-DD HH24:MI:SS') とto_date(2012年)の間にタイムキャプチャされた時刻からのパケット損失-01-18 08:00:00 '、' YYYY-MM-DD HH24:MI:SS ') 注文:insert_date

DBMS_OUTPUT:


2012年1月18日10時43分36秒AM EV TAMP20-MTRO-NID1SYRC01-MTRO-NID1 1


INSERT_DATEレコードいるServiceID TIMECAPTURED ONEWAYMAXDELAY TWOWAYMAXDELAY TWOWAYMAXDELAYVARパケット損失/ 18/2012 7:25:24 AM 40822 79693 343 0
1/18/2012 10:43:36 AM EV SYRC01-MTRO-NID1TAMP20-MTRO-NID1 1/18/2012 7:25:13 AM 39642 79720 334 0
2012年1月18日午前10時43分36秒AM EV TAMP20-MTRO-NID1SYRC01-MTRO-NID1 2012年1月18日私は見て準備ができて多少このような問題について、多くの記事を、しかしでき をされていないいる

まだ鍵を見つける!

私はクエリに文字列を使用させ、単に日付を文字列に変換してOracle TO_DATE関数に挿入できるようにしようと考えましたが、これを行う必要はないようです。

これは私のprintlnステートメントの出力です。印刷する日付に時間部分が表示されないことは問題ですか?

SQLクエリ:select timecaptured from oam1731data5 where timecaptured between?そして? Java Oracle日付:2012-01-18終了日2012-01-18

ご協力いただきありがとうございます。

ミッチ

答えて

0

java.sql.Dateは時間なし日付を表します。時間の部分を気にする場合は、タイムスタンプを使用する必要があります。

javadoc of java.sql.Dateは言う:

SQLのDATEの定義、java.sqlので包まれたミリ秒の値 に準拠します。 のインスタンスが関連付けられている特定の時間帯の タイムゾーンで時、分、秒、およびミリ秒を0に設定することによって、日付インスタンスを「正規化」する必要があります。

0

開始日と終了日の日付を使用しても問題はありません。指定された間隔のデータは、その時間間隔で検索される必要があります(この場合、1/18/2012に挿入されたデータが検索されるはずです)。したがって、時間部分を省略すると問題。

+0

私はそうは思わない。基本的に、このクエリは、2012年1月18日00:00:00から1/18/2012 00:00:00までの日付と時刻を持つすべての行を検索します。明らかに、何もありません。 –

+0

このクエリで、日付が1/18/2012 00:00:00から1/18/2012 00:00:00までのすべての行を検索しているかどうかわかりません。そうであれば、明らかに正しいです。理解するには、開始日の値を変更してそれを試してみてください。 –

関連する問題