在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);
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());
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
有很多有用的方法,你应该看看:)
因此片段可能如下所示:
PreparedStatement ps = connection.prepareStatement(sql);
try(ResultSet rs = ps.executeQuery()){
while(rs.next()) {
String val = rs.getString(1);
}
}
您的代码的问题是:
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(" ");
这些数组将包含所有必需的元素。