测试代码:
//================================================================================================
//公用代码
Connection cn = DBManager.getConn("jdbc:oracle:thin:u/p@dbs:1521:orcl");
String selectSQL = "SELECT COL1 FROM TB1";
//各方式代码……
DBManager.closeConn(cn);
//================================================================================================
//方式一:利用ResultSet的getRow方法
Statement stmt = cn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_UPDATABLE);
ResultSet rs = stmt.executeQuery(selectSQL);
rs.last();
logger.info("利用ResultSet的getRow方法:" + rs.getRow());
rs.close();
stmt.close();
//================================================================================================
//方式二:自行迭代方式
Statement stmt = cn.createStatement();
ResultSet rs = stmt.executeQuery(selectSQL);
int i = -1;
while (rs.next()) {
i++;
}
logger.info("自行迭代方式:" + i);
rs.close();
stmt.close();
//================================================================================================
//方式三:SELECT COUNT(*) FROM (SQL)方式
String newSQL = "SELECT COUNT(1) AS CT FROM (" + selectSQL + ")";
Statement stmt = cn.createStatement();
ResultSet rs = stmt.executeQuery(newSQL);
rs.next();
logger.info("SELECT COUNT(1) AS CT FROM (SQL)方式:" + rs.getInt(1));
rs.close();
stmt.close();
//================================================================================================
以下是对 7000 条数据的测试结果
1,利用ResultSet的getRow方法
<耗时>:906(ms)。
<耗时>:860(ms)。
<耗时>:781(ms)。
<耗时>:766(ms)。
<耗时>:797(ms)。
2,自行迭代方式
<耗时>:672(ms)。
<耗时>:688(ms)。
<耗时>:672(ms)。
<耗时>:687(ms)。
<耗时>:688(ms)。
3,SELECT COUNT(1) AS CT FROM (SQL)方式
<耗时>:500(ms)。
<耗时>:484(ms)。
<耗时>:500(ms)。
<耗时>:484(ms)。
<耗时>:500(ms)。
总体上看,三种方式貌视差不大,相互间仅100、200ms的差别。
从测试结果看,第三种方式效率最高,自行迭代次之,ResultSet的getRow方法效率最低。
由此看来,要获取 一条SQL查询语句返回的记录数,单执行一条SQL去获取要比通过ResultSet对象获取来得实惠。
相关推荐
好长时间没摸数据库了,周末在家写了个报表的存储过程,一时间对使用存储过程实现分页的同时并计算出记录总数不知道怎么更好的去实现。按照我们正常的业务逻辑,存储过程数据首先是分页,其次接受若干查询条件,...
int pageSize;...//记录总数 int totalPage;//总页数 int curPage;//待显示页码 String strPage; int i; pageSize=10;//设置一页显示的记录数 strPage=request.getParameter("page");//获得待显示页码
public int getCountTopic()//获取记录总数。 { return intCountTopic; } public int getPageCount() //获取总页数。 { return intPageCount; } public int getIntPage() //获取当前页数。 { return int...
//获取记录总数 sqlRst.last(); intRowCount = sqlRst.getRow(); //记算总页数 intPageCount = (intRowCount+intPageSize-1) / intPageSize; //调整待显示的页码 if(intPage>intPageCount) intPage...
首先计算出从数据库中选取的记录总数,再根据每页需要显示的记录数确定共有多少页,显示时通过循环控制每页记录的数量。其中最重要的是我们要知道当前应该显示第几页,所以通过地址栏传参的方式实现,在页面跳转的...
//获取记录总数 sqlRst.last();//??光标在最后一行 intRowCount = sqlRst.getRow();//获得当前行号 //记算总页数 intPageCount = (intRowCount + intPageSize - 1) / intPageSize; //调整待显示的页码 ...
//获取记录总数 sqlRst.last(); intRowCount = sqlRst.getRow(); //记算总页数 intPageCount = (intRowCount+intPageSize-1) / intPageSize; //调整待显示的页码 if(intPage>intPageCount) intPage = int...
比如:数据库分页,你不用再关心记录总数怎么取,不用考虑各种数据库之间的差异,最关键的是绝对的高效。再比如LOB字段的处理,可以直接通过增、删、改、查等接口处理,遇到较大的LOB,也可以用流的方式处理,避免...
* 返回记录总数, 使用方法: getAllCount("SELECT count(ID) from tableName") 2004-06-09 * 可滚动的 Statement 不能执行 SELECT MAX(ID) 之类的查询语句(SQLServer 2000) * * @param sql * 需要执行的 SQL *...
MyBatis使用简单的XML或注解用于配置和原始映射,将接口和Java的POJOs(Plan Old Java Objects,普通的Java对象)映射成数据库中的记录. orm工具的基本思想 无论是用过的hibernate,mybatis,你都可以法相他们有一个...