2015-09-02 82 views
0

我想從oracle數據庫中提取記錄。我有一個選擇查詢,其中有一個order by子句實現。現在,當我在蟾蜍上觸發查詢時,我以正確的順序得到結果。即上午10點的記錄順序如同 記錄1,記錄2,記錄3和10:05記錄1,記錄2,記錄3.這就是我所需要的。選擇JDBC查詢不按順序檢索記錄

現在,當我通過Java代碼JDBC訪問它時。我嘗試迭代結果集,但是在上午10:05,我得到了像記錄2,記錄1,記錄3那樣的順序。由於這個原因,當我將記錄添加到數組列表時,順序並沒有被消除。 我不想在添加後對arraylist的記錄進行排序。

有人可以讓我知道爲什麼使用jdbc記錄不會按照我們可以看到使用蟾蜍的順序獲取嗎?

示例代碼

try{ 
      List<TestObjVO> testResults = new ArrayList<TestObjVO>(); 
      double statusValue = 0; 

      //Connection code 

      pstmt = conn.prepareStatement(QUERY); 

      ResultSet rs = pstmt.executeQuery(); 

      while (rs.next()) { 
       testObj = new TestObjVO(); 

       String date = rs.getString(1); 
       String status = rs.getString(2); 
       String svc_nm= rs.getString(3);   


       if("SUCCESS".equalsIgnoreCase(status)){ 
        statusValue = 1; 
       }else if("ERROR".equalsIgnoreCase(status)){ 
        statusValue = -1; 
       } 

       testObj.setTime(date); 
       testObj.setStatus(statusValue); 
       testObj.setSvc_nm(svc_nm); 

       testResults.add(testObj); 
      } 

SELECT查詢

SELECT to_char(PROBING_DATE,'DD-MM-YYYY HH24:MI:SS') AS PROBING_DATE, STATUS, SERVICE_NAME FROM TABLE_NAME WHERE PROBING_DATE >= (sysdate-30/1440) ORDER BY PROBING_DATE,SERVICE_NAME 

create table TABLE_NAME(
    probing_date  TIMESTAMP(6) not null, 
    status   VARCHAR2(8) not null, 
service_name  VARCHAR2(128) not null 
) 
+4

請添加您的代碼 –

+2

您可以爲您的問題添加一些代碼嗎? –

+4

向我們展示您的實際'SELECT'查詢,包括'ORDER BY'子句和相關表的定義(作爲'CREATE TABLE'語句) –

回答

2

更改您的選擇是這樣的:

SELECT to_char(PROBING_DATE,'DD-MM-YYYY HH24:MI:SS') AS PROBING_DATE_STR, 
     PROBING_DATE, 
     STATUS, 
     SERVICE_NAME 
    FROM TABLE_NAME 
    WHERE PROBING_DATE >= (sysdate-30/1440) 
ORDER BY PROBING_DATE,SERVICE_NAME; 

請注意有一個額外的字段返回並且是原始TIMESTAMP字段。

+2

您可能想要添加,在您的語句中,對實際時間戳值進行排序。使用原始查詢時,對'to_char()'函數的結果進行排序 - 給定格式掩碼 - 不會正常工作。 –

+0

是的,這是真正的答案,但我希望OP嘗試這一點,並問爲什麼它的作品,讓他至少試圖自己得到它。 – BigMike

+0

感謝BigMike!我認爲這已經解決了這個問題。 –