Java,循环遍历结果集

时间:2011-10-04 05:18:30

标签: java jdbc

在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 ResultSet提取这些值?

这是我到目前为止所做的:

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

4 个答案:

答案 0 :(得分:35)

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());

答案 1 :(得分: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中有许多有用的方法,你应该看一下:)

答案 2 :(得分:0)

  • ResultSet 应该关闭。
  • PreparedStatement 可以防止 SQL 注入。
  • PreparedStatement 最终应该关闭。

因此代码片段可能如下所示:

PreparedStatement ps = connection.prepareStatement(sql);
try(ResultSet rs = ps.executeQuery()){
    while(rs.next()) {
        String val = rs.getString(1);
    }
}

答案 3 :(得分:-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(" ");

这些数组将包含所有必需元素。