2011-10-04 140 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