Java,循环结果集

问题描述 投票:0回答:4

在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);
java sql jdbc resultset
4个回答
46
投票
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());

18
投票

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
投票
  • 结果集应该关闭。
  • PreparedStatement 可以防止 SQL 注入。
  • PreparedStatement 最终应该被关闭。

因此片段可能如下所示:

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

-2
投票

您的代码的问题是:

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

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

© www.soinside.com 2019 - 2024. All rights reserved.