调用RusltSet的一些方法后丢失第一行数据
调用RusltSet的一些方法后丢失第一行数据(已经解决)
(解决方案在后面)
代码如下:
public static Object[][] resultSetToObjectArray(ResultSet rs) {
Object[][] data = null;
ResultSet rs1 = rs;//测试从数据库读过来的rs有没有问题即不对rs1操作
try {
rs.last();//回到最后一行
int rows = rs.getRow()-1;//数组下标从0开始要减1
data = new Object[rows][]; //二维数组的行数
ResultSetMetaData md = rs.getMetaData();//获取记录集的元数据
int columnCount = md.getColumnCount();//列数
rs.first();//有人说是这里出现问题rs 第一条记录指向的是空 执行一次rs.next()才 会得到数据的第一条记录
//rs.first()把游标指向的数据的第一条记录,然后再while (rs.next()) 就成从第二条记录开始遍历,这样结果就漏掉了第一条数据。
//然而我后面用的是rs1应该没有问题的啊,结果还是少了第一条数据
int k = 0;
while(rs1.next()) {
System.out.println("BLL 里的"+rs1.getString("_account"));
Object[] row = new Object[columnCount];
for(int i=0; i<columnCount; i++) {
row[i] = rs1.getObject(i+1).toString();
}
data[k] = row;
k++;
}
} catch (Exception e) {
}
return data;
}
问题描述请看代码注释,未解决,欢迎各位高手指点迷津!!!
运行结果
public static Object[][] resultSetToObjectArray(ResultSet rs) {
Object[][] data = null;
try {
rs.last();//回到最后一行
int rows = rs.getRow();//数组行数
data = new Object[rows][];
ResultSetMetaData md = rs.getMetaData();//获取记录集的元数据
int columnCount = md.getColumnCount();//列数
rs.first();
int k = 0;
do {
Object[] row = new Object[columnCount];
for(int i=0; i<columnCount; i++) {
row[i] = rs.getObject(i+1).toString();
}
data[k] = row;
k++;
}while(rs.next());
} catch (Exception e) {
//e.printStackTrace();
JOptionPane.showMessageDialog(null, "数据库无记录");
}
return data;
}
其实rs.fist()指的就是第一条记录,在执行rs.next()后会让指针往后移动一个导致第一条记录丢失。故循环语句不能用while而要用do while先执行再判断和移动。