簡體   English   中英

如何獲取java.sql.ResultSet的大小?

[英]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(*)並獲得計數,如博文中所示。

這是一個棘手的問題。

  1. 通常, result.last()滾動到ResultSet的末尾,並且您不能返回。

  2. 如果您使用帶有“ resultSetType”參數的createStatementprepareStatement方法之一創建了語句,並且已將參數設置為ResultSet.TYPE_SCROLL_INSENSITIVEResultSet.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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM