[英]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.