java JDBC获得数据库结果集的行数但少了第一行的数据

String sql = "SELECT * FROM TABLEONE";
ResultSet rs = conn.getExecuteQuery(sql);
try {
rs.last();
int r = rs.getRow();
if(r==0){//如果表1没查到值,则查询表2
sql="SELECT * FROM TABLETWO";
rs = conn.getExecuteQuery(sql);
}
//若表1查到值输出
rs.first();//--------------得到的结果集少了第一行的原因
while(rs.next()){
.....//获得结果集各行的值的代码①
}
}catch(SQLException e){}
//但是得到的结果集少了第一行

我要怎么样才能得到同样的效果(查表1,没查到值则查表2,查到则输出表1的值),同时能得到第一行的数据呢?不想重复写代码①

String sql = "SELECT * FROM TABLEONE";
ResultSet rs = conn.getExecuteQuery(sql);
try {
if(!rs.next()){//如果表1没查到值,则查询表2
sql="SELECT * FROM TABLETWO";
rs = conn.getExecuteQuery(sql);
}
//若表1查到值输出
while(rs.next()){
.....//获得结果集各行的值的代码①
}
}catch(SQLException e){}

改成这样试试。追问

不行的,因为在执行while之前已经执行了一次next(),而且它执行了却没有得到结果值,所以第一行还是没有获取到。

追答

String sql = "SELECT * FROM TABLEONE";
ResultSet rs = conn.getExecuteQuery(sql);
try {
rs.last();
int r = rs.getRow();
if(r==0){//如果表1没查到值,则查询表2
sql="SELECT * FROM TABLETWO";
rs = conn.getExecuteQuery(sql);
while(rs.next()){
.....//获得结果集各行的值的代码①
}
return; //结束
}
//若表1查到值输出
while(rs.next()){
.....//获得结果集各行的值的代码①
}
}catch(SQLException e){}

这样是否可行呢。

追问

如果r!=0,则直接执行下面的while,这个时候结果集的游标是指在最后一行的,所以执行rs.next()是得不到数据的,这样不对。我后来想到一个方法是可以的,跟你共享一下:在 ”rs.first();“后面写“rs.previous();”就是把游标放到第一行的前一行,然后执行while(rs.next()){......}这样就可以了。

追答

嗯

温馨提示:答案为网友推荐,仅供参考
相似回答