忽然發(fā)現(xiàn)前段時間編的一個程序有問題,查數(shù)據(jù)庫少了一條記錄,檢查之后發(fā)現(xiàn)是resultset.first()的問題,總結(jié)如下:
首先看一下原來的代碼段:
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對象,程序中運(yùn)用其.last()和.first()方法,需要在創(chuàng)建statement時修改其參數(shù),具體代碼如下:
smt = conn.createStatement(rs.TYPE_SCROLL_INSENSITIVE, rs.CONCUR_READ_ONLY);這樣就可以了,否則只支持順序,不支持逆序,會報錯的。
繼續(xù).first()的問題。在代碼中先rs.first(),再rs.next(),然后再取結(jié)果,會從查詢結(jié)果的第二條記錄開始取值,就遺漏了第一條記錄。所以將代碼修改如下:
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()的值從數(shù)組的第二個元素開始賦值。