JDBC获取 SQL查询语句返回记录数 的三种方式效率比较
2008年06月01日 星期日 下午 05:07
测试代码:
//==================================================
//公用代码
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对象获取来得实惠。
分享到:
相关推荐
sql语句分页查询 自己总结下来的 希望能给大家一点帮助!
Jmeter中JDBC request多条SQL语句使用
JDBC是执行SQL语句的Java API。其实,JDBC本身是一个产品的商标名。相对与ODBC(Open Database Connectivity开放数据库连接),也可以把JDBC看作“Java Database Connectivity(Java数据库连接)”。它由一组用Java...
1、在应用中jdbc url最前面添加jdbc:log4;比如oracle的url就变成了jdbc:log4jdbc:oracle:thin:@x.x.x.x:1521:dbname; 2、在日志系统中设置jdbc.sqlonly、jdbc.sqltiming等日志级别,可直接将log4jdbc doc中的日志...
动态拼接sql语句工具类,拼接where后面语句 配合原生jdbc仿动态sql注入 if (ObjectUtil.isNotEmpty(maxLat)&&ObjectUtil.isNotEmpty(minLat)){ sqlParamList.add(new SqlParam("lat",minLat, SqlOpEnum.GE)); ...
源代码 博文链接:https://he-wen.iteye.com/blog/757659
P6spy是一个JDBC Driver的包装工具,p6spy通过对JDBC Driver的封装以达到对SQL语句的监听和分析,以达到各种目的。 p6spy的安装步骤: 1. 下载p6spy的安装包 2. 把p6spy的jar包放到Classpath中,如果是WEB App...
com.microsoft.sqlserver.jdbc.SQLServerException: 只进结果集不支持请求的操作 解决方案
很详细的讲解如何在Myeclipse中用jdbc连接数据库
JDBC+注册驱动+获取连接+定义sql语句+获取执行sql对象+执行sql
打印完整带参数sql,不用自己去替换问号,后端省时省力。
这是JDBC连接SQL Server2008示例代码,其中有一份是在“SQL Server Authentication”模式下的,即需要账号密码,另一份为在“Windows Authentication”模式下的,不需要账号密码
sqlserver各版本驱动 DriverManager:负责...Statement:用以执行SQL查询和更新(针对静态SQL语句和单次执行)。PreparedStatement:用以执行包含动态参数的SQL查询和更新(在服务器端编译,允许重复执行以提高效率)
复杂sql查询语句,非常详细
是一个有用户,商品分类,商品,订单和订单相信五个表的简单数据库SQL语句,这是在学习jdbc是专门用来练习使用的。
执行sql语句, 并将结果通过ArrayList返回。字段名统一大写 比如 select * FROM A 返回的List中包含了所有A表中的字段值,通过MAP来取,字段名统一大写。 只有两个方法,没有示例,请自行编写测试。主体结构肯定是...
JDBC(Java Database Connectivity, Java 数 据 库 连 接)是 一 种可用于执行 SQL 语句的 Java API(Application Programming Interface, 应用程序设计接口)。它由一些 Java 语言编写的类和接口组成。JDBC 为数据库...
JDBC的动态SQL语句在浏览器_服务器模式中的应用.pdf
JAVA的SQL帮助类,帮助使用jdbc快速使用SQL语句更新,删除,查询数据,只需要专注于SQL语句的执行,而不需要写数据库的连接与释放
DBC(Java DataBase Connectivity,java数据库连接)是一种用于执行SQL语句的Java API,可以为多种关系数据库提供统一访问,它由一组用Java语言编写的类和接口组成。JDBC提供了一种基准,据此可以构建更高级的工具和...