忽然發現前段時間編的一個程序有問題,查數據庫少了一條記錄,檢查之后發現是resultset.first()的問題,總結如下:
首先看一下原來的代碼段:
rs = smt.executeQuery(service);
rs.last();
int numberOfRows = rs.getRow();
String[] results = new String[numberOfRows];
int index = 0;
rs.first();
while (rs.next()) {
results[index] = rs.getString(1);
index++;
}
這里的rs是ResultSet對象,程序中運用其.last()和.first()方法,需要在創建statement時修改其參數,具體代碼如下:
smt = conn.createStatement(rs.TYPE_SCROLL_INSENSITIVE, rs.CONCUR_READ_ONLY);這樣就可以了,否則只支持順序,不支持逆序,會報錯的。
繼續.first()的問題。在代碼中先rs.first(),再rs.next(),然后再取結果,會從查詢結果的第二條記錄開始取值,就遺漏了第一條記錄。所以將代碼修改如下:
rs = smt.executeQuery(service);
rs.last();
int numberOfRows = rs.getRow();
String[] results = new String[numberOfRows];
int index = 1;
rs.first();
results[0] = rs.getString(1);
while (rs.next()) {
results[index] = rs.getString(1);
index++;
}
即rs.first()的時候就取值,然后將index初始化為1,而不是0,將rs.next()的值從數組的第二個元素開始賦值。