再写JDBC时,最后得到的ResultSet对象保存了所查询的数据。
ResultSet rz=null;
PreparedStatement ps=null;
ps=conn.prepareStatement(sql);
rs=ps.executeQuery();
怎么样获取rz共有多少条记录???
就像下面一样最后i的值就是rz中的记录数,但是下面这样太麻烦,有简单的办法没???
int i=0;
while(rz.next()){
i++;
}
ResultSet rz=null;
PreparedStatement ps=null;
ps=conn.prepareStatement(sql);
rs=ps.executeQuery();
怎么样获取rz共有多少条记录???
就像下面一样最后i的值就是rz中的记录数,但是下面这样太麻烦,有简单的办法没???
int i=0;
while(rz.next()){
i++;
}
while(rz.next()){
i++;
}
这样是能够得到,但是光标就移动到最后了,
如果再使用
while(rz.next()){ }
来打印查询的数据的话,光标就在最后,就无法进入while循环了。
通过first() 或者beforeFirst() 方法来移动光标的话,会报错误,无法移动~
该怎么办??
这一句先加上结果集可回卷参数:
ps = conn.prepareStatement(sql, ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_READ_ONLY);
然后得到rs后,先rs.last();int count = rs.getRows();
就是总数,然后再rs.first();又回到没有last的开始位置就可以正常NEXT了
int count = rs.getRows();
要记住游标的类型要改成可以前后移动的
rs.getRows()就是你要的结果了
但是要注意游标的位置
package com.db;import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;public class testMysqlConn { private static String Driver = "com.microsoft.jdbc.sqlserver.SQLServerDriver";
private static String url = "jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=testing";
private static String user = "sa";
private static String password = "*****";
private static Connection con = null;
private static PreparedStatement pstmt = null;
private static ResultSet rs = null; public static void main(String[] args) {
try {
Class.forName(Driver);// 加载数据库驱动
con = DriverManager.getConnection(url, user, password);// 连接数据库
String sql = "select * from table1";
pstmt = con.prepareStatement(sql, ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_READ_ONLY);
rs = pstmt.executeQuery();
rs.next();
rs.last();
int count = rs.getRow();
System.out.println("count=" + count);
rs.beforeFirst();
while (rs.next()) {
//do your own
}
} catch (Exception ex) {
ex.printStackTrace();
}
}}
1。定义int i,做为计数器,while(rs.next) 的时候,i++~~最后的i值就是rs得到的纪录数。
1。一般有需要的话,我会把每一个rs得到的对象加到一个集合(List)里面,最后用list.size()的方法也就知道纪录的条数了。。
一般情况下都是用count(*)来做.
比如说在分页的时候:往往一个是计算总数,另一个用来查询对应的数据
顶一下,我一般用聚合函数count,呵呵
创建可滚动的结果集
ps = conn.prepareStatement(sql, ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_READ_ONLY);
然后调用ResultSet的last()方法,此时游标会移动到结果集的最后的一条记录
再调用ResultSet的getRows()方法