2011-10-04 69 views
28

在Java中,我有這樣的查詢:Java中,通過結果循環設置

String querystring1= "SELECT rlink_id, COUNT(*)" 
        + "FROM dbo.Locate " 
        + "GROUP BY rlink_id "; 

表rlink_id有這樣的數據:

Sid  lid 
3   2 
4   4 
7   3 
9   1 

我如何提取這些值與Java結果?

這是我到目前爲止有:

String show[] = {rs4.getString(1)}; 
String actuate[] = {rs4.getString(2)}; 
asString = Arrays.toString(actuate); 

回答

13

Result Set實際上是包含多行數據,並使用光標指出的當前位置。所以你的情況,rs4.getString(1)只會讓你在第一行的第一列中的數據。爲了改變到下一行,你需要調用next()

一個簡單的例子

while (rs.next()) { 
    String sid = rs.getString(1); 
    String lid = rs.getString(2); 
    // Do whatever you want to do with these 2 values 
} 

有在ResultSet許多有用的方法,你應該看看:)

+1

當我通過循環的給我只值的第一行 – user977830

+0

沒有地方調用這個SIDñ蓋rs.next()在while循環跳過第一個結果? – Durin

+2

@Durin:檢查的Javadoc [ResultSet.next()](http://docs.oracle.com/javase/6/docs/api/java/sql/ResultSet.html#next%28%29)中,「光標」實際上是前點** **時創建:) –

30
List<String> sids = new ArrayList<String>(); 
List<String> lids = new ArrayList<String>(); 

String query = "SELECT rlink_id, COUNT(*)" 
      + "FROM dbo.Locate " 
      + "GROUP BY rlink_id "; 

Statement stmt = yourconnection.createStatement(); 
try { 
    ResultSet rs4 = stmt.executeQuery(query); 

    while (rs4.next()) { 
     sids.add(rs4.getString(1)); 
     lids.add(rs4.getString(2)); 
    } 
} finally { 
    stmt.close(); 
} 

String show[] = sids.toArray(sids.size()); 
String actuate[] = lids.toArray(lids.size()); 
+0

不應該是一個「做什麼」?迭代器是否已經處於正確的位置以便在開始時訪問第一行? (否則爲什麼訪問第一行的教程只能以其他方式工作)? – GameDeveloper

+0

絕對不是(查詢可能根本不返回任何行)。你在說什麼教程? –

+0

是固定我的問題好,謝謝.. U.U有一個錯誤的教程在首位的谷歌搜索,似乎現在沒有了。 – GameDeveloper

-3

的用你的代碼的問題是:

 String show[]= {rs4.getString(1)}; 
    String actuate[]={rs4.getString(2)}; 

這將在每次創建新陣列定時你的循環(不會像你可能假設的那樣追加),因此最終每個數組只有一個元素。

這裏就是爲了解決這個另一種方式:

StringBuilder sids = new StringBuilder(); 
    StringBuilder lids = new StringBuilder(); 

    while (rs4.next()) { 
     sids.append(rs4.getString(1)).append(" "); 
     lids.append(rs4.getString(2)).append(" "); 
    } 

    String show[] = sids.toString().split(" "); 
    String actuate[] = lids.toString().split(" "); 

這些陣列將擁有所有必需的元素。

+1

這是對我所見過的陣列進行裝箱的最奇怪的方式。而且,如果你得到的一個字符串包含一個空格呢? –

+0

downvote的任何理由? – Santosh

+0

OP正在存儲一個int而不是一個字符串。所以那裏肯定不會有任何空間。它是另一種創建陣列的方式,與其他人建議的方式不同。 – Santosh