2012-09-21 21 views
0

如果我在Java中嘗試以下查詢,則Java僅返回表格的第一個條目而沒有任何錯誤。但是,如果我將相同的查詢複製到Access,Access將返回全部33個條目。Java查詢僅查找第一個條目

查詢:

SELECT Country, Sum(SumOfNumber) AS number FROM CountryList WHERE Year=2012 AND (Month=1 Or Month=2 Or Month=3) AND Entity='xxx' GROUP BY Country ORDER BY Sum(SumOfNumber) DESC

rs.last(); 
System.out.println(rs.getRow()); 

返回1

有什麼建議?

好球員,現在我刪除千卡「ORDER BY總和(SumOfNumber)DESC」和Java返回的所有國家,並在年底扔異常「無效的光標狀態」

public void doconnect(){ 
    try{ 
     Class.forName("sun.jdbc.odbc.JdbcOdbcDriver").newInstance(); 
     conn = DriverManager.getConnection(ConnectURL,user,pw); 
     Statement stmt = conn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY); 


     String query = "SELECT Country, Sum(SumOfNumbers) AS number FROM CountryList WHERE Year=2012 AND (Month=1 Or Month=2 Or Month=3) AND Entity='xxx' GROUP BY Country ORDER BY Sum(SumOfNumbers) DESC"; 
     System.out.println(query); 
     ResultSet rs = stmt.executeQuery(query); 

     while(rs.next()){ 
      System.out.println(rs.getString("Country")); 
     } 
     rs.close(); 

    } 
    catch(Exception e){ 
     System.err.println(e); 
     e.printStackTrace(); 
    } 
    finally{ 
     if(conn!=null){ 
      try{ 
       conn.close(); 

      } 
      catch(Exception e){ 
       e.printStackTrace(); 
      } 
     } 
    } 
} 
+1

請問您可以包括其餘的代碼嗎? –

回答

0

從Java API則resultset.last () 將光標移動到此ResultSet對象中的最後一行。 Check it here, 刪除rs.last並遍歷結果集這樣

while(rs.next()) { 
    sysout(rs.getString("your column name")); 
} 
1

變化

rs.last(); 
System.out.println(rs.getRow()); 

到(讓所有國家)

while (rs.next()) { 
    System.out.println(rs.getString("Country")); 
} 

從所有行,得到的結果而不只是最後一個。

+0

是的,我知道。我跳到最後一行獲取最後一行的編號。因爲最後一行的數字是「1」,所以整個表格只有一行。但這不可能是真的。 – user1688612

+0

@ user1688612:對於某些ResultSet,'getRow()'的實現是可選的,你確認數據不存在嗎? – Keppil

+0

數據必須存在,因爲完全相同的查詢會返回33個訪問條目。而且這也不是我第一次這樣做。這是第一次發生這種情況,我無法解釋我做錯了什麼或不同。 – user1688612

0

當然,你只會得到一行(最後一行)。這是因爲您使用rs.last()直接轉到ResultSet的最後一行。嘗試迭代ResultSet以獲取所有返回的行。

要查看返回多少行,你可以運行查詢:SELECT count(*) as count FROM CountryList WHERE Year=2012 AND (Month=1 Or Month=2 Or Month=3) AND Entity='xxx',然後用得到

while(rs.next()){ 
    int count = rs.getInt("count"); 
} 
+0

拋出異常 – user1688612

+0

你得到了什麼樣的異常? – MaVRoSCy

+0

像無效的光標狀態。 – user1688612

0

rs.last()移動光標到resultSet最後一排,這意味着您已經閱讀後的數線,沒有更多的數據是可用的,我也建議你使用由

Keppil提供的功能:當(rs.next()){ 的System.out.println(rs.getRow()); }

+0

只是爲了向你表明我知道我在這裏做什麼。 (rs。 while(rs。next()){ rs.getRow(); } 還返回1! – user1688612