2015-09-02 55 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!我认为这已经解决了这个问题。 –