[英]How to get the size of a java.sql.ResultSet?
我想在while循环中ResultSet
的大小。
尝试了下面的代码,我得到了想要的结果。 但这似乎与result.next()
了,而如果我这样做,则while循环只会循环一次。 这样做的正确方法是什么?
result.first();
while (result.next()){
System.out.println(result.getString(2));
System.out.println("A. " + result.getString(5) + "\n" + "B. " + result.getString(6) + "\n" + "C. " + result.getString(7) + "\n" + "D. " + result.getString(8));
System.out.println("Answer: ");
answer = inputquiz.next();
result.last();
if (answer.equals(result.getString(10))) {
score++;
System.out.println(score + "/" + result.getRow());
} else {
System.out.println(score + "/" + result.getRow());
}
}
这样做的正确方法是什么?
将其映射到List<Entity>
。 由于您的代码远不能自我记录(您使用索引而不是列名),因此我无法给出一个合适的示例。 所以我以一个Person
为例。
首先创建一个代表单个行包含内容的javabean类。
public class Person {
private Long id;
private String firstName;
private String lastName;
private Date dateOfBirth;
// Add/generate c'tors/getters/setters/equals/hashcode and other boilerplate.
}
(像Eclipse这样的像样的IDE可以自动生成它们)
然后让JDBC完成以下工作。
List<Person> persons = new ArrayList<Person>();
while (resultSet.next()) {
Person person = new Person();
person.setId(resultSet.getLong("id"));
person.setFirstName(resultSet.getString("fistName"));
person.setLastName(resultSet.getString("lastName"));
person.setDataOfBirth(resultSet.getDate("dateOfBirth"));
persons.add(person);
}
// Close resultSet/statement/connection in finally block.
return persons;
那你就可以做
int size = persons.size();
然后替换您的代码示例
for (int i = 0; i < persons.size(); i++) {
Person person = persons.get(i);
System.out.println(person.getFirstName());
int size = persons.size(); // Do with it whatever you want.
}
你可以做result.last();
并调用result.getRow();
(检索当前行号)进行计数。 但是它会加载所有行,并且如果结果集很大,可能效率不高。 最好的方法是事先对查询执行SELECT COUNT(*)
并获得计数,如本博文中所示。
这是一个棘手的问题。
通常, result.last()
滚动到ResultSet
的末尾,并且您不能返回。
如果您使用带有“ resultSetType”参数的createStatement
或prepareStatement
方法之一创建了语句,并且已将参数设置为ResultSet.TYPE_SCROLL_INSENSITIVE
或ResultSet.TYPE_SCROLL_SENSITIVE
,则可以使用first()
或relative()
滚动ResultSet
或其他一些方法。
但是,我不确定是否所有数据库/ JDBC驱动程序都支持可滚动结果集,并且这样做可能会对性能产生影响。 (可滚动的结果集意味着数据库或JVM都需要将整个结果集缓存在某个位置...或重新计算它...对于大型结果集而言这是昂贵的。)
获取ResultSet大小的方法,无需使用ArrayList等
int size =0;
if (rs != null)
{
rs.beforeFirst();
rs.last();
size = rs.getRow();
}
现在,您将获得大小,并且,如果要打印ResultSet,也可以在打印之前使用以下代码行,
rs.beforeFirst();
还有另一种从数据库获取计数的方法。
注意:当DBA进行实时统计时,此列将更新
select num_rows from all_Tables where table_name ='<TABLE_NAME>';
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.