使用 group by 子句后的ResultSet的问题!!
数据库(ACCESS)中有许多电话号码,我要统计每个号码出现多少次,在Java中写代码:
String sql= "select count(phone) as times " +
" from yzx group by [phone] ";
DBManager db=new DBManager(DBManager.JDBC_ODBC_DRIVER);//这个类是自己写的,为了方便,就是连接数据库,创立statement
try
{
db.openDatabase( "jdbc:odbc:phone ");
ResultSet rs=db.executeSQL(sql);
rs.last();
int size = rs.getRow(); // 取得记录数,注意这里!!!!
rs.beforeFirst();
System.out.println( "TIMES "+size); //!!!!!!!!!!
while(rs.next())
{
String phone=rs.getString( "times ");
System.out.println(phone);
}
}
catch(Exception e)
{
System.out.println(e.getMessage());
}
}
输出的结果是正确的,一共有179个不同的号码,所以是179个数字,但是ResultSet的size却是8000多,于是,最后在while(rs.next())抛出了异常:
[Microsoft][ODBC 驱动程序管理器] 无效的游标状态
太奇怪了,为什么resultset的size没有按照phone归类阿??!!
PS:上面那句sql语句在access里执行结果完全正确
------解决方案--------------------在循环完的时候 也可以查看rs.isLast() 是true 还是false
------解决方案--------------------getRow(); rs.last(); rs.beforeFirst();这几个方法是要根据不同的数据库、driver或者数据库中游标和锁来决定是否能使用的,我印象里好像oracle可以对这几个方法完全支持,其他数据库一般要看情况了。
你要得到总记录数,我建议你最好把数据集用循环+1的方法来实现吧