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对象获取来得实惠。
分享到:
相关推荐
### JDBC分页SQL语句详解 #### 一、引言 在数据库操作中,分页查询是非常常见且重要的一个功能。对于大型应用而言,一次性加载大量数据不仅会消耗过多资源,还可能导致用户体验下降。因此,合理地进行分页处理显得...
使用SQLJDBC或SQLJDBC4驱动,Java开发者可以使用JDBC API来创建数据库连接,执行SQL语句,处理结果集等。基本步骤如下: - 加载驱动:`Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");` - 建立...
在JMeter中,JDBC Request支持以下几种不同的SQL语句执行方式: 1. **Select Statement** 2. **Update Statement** 3. **Prepared Select Statement** 4. **Prepared Update Statement** 5. **Callable Statement**...
JDBC允许Java开发者通过编写Java代码来执行SQL语句,实现对数据库的操作,如查询、插入、更新和删除数据。 JDBC的主要优势在于其跨平台性和数据库无关性。与ODBC(Open Database Connectivity)不同,ODBC是一个...
本篇将深入讲解如何在使用JDBC时,通过统一的方式设置SQL语句中的参数,提高代码的可读性、可维护性和安全性。我们将探讨以下知识点: 1. JDBC基础: JDBC是Java平台中用于与关系数据库交互的一组接口和类。它提供...
在Java的JDBC编程中,`PreparedStatement`是一个非常重要的接口,它用于预编译SQL语句,提高了数据库操作的效率和安全性。当我们处理大量重复的SQL操作时,使用`PreparedStatement`可以避免SQL注入等问题,同时提升...
SQL Server 2000 JDBC 是Java编程语言与Microsoft SQL Server 2000数据库进行交互的一种重要方式。JDBC(Java Database Connectivity)是Java API,允许Java应用程序通过Java虚拟机(JVM)与各种数据库建立连接。在...
3. **批处理操作**:允许多个SQL语句一次性提交,减少网络通信次数,提高整体执行效率。 4. **游标支持**:游标允许程序逐行处理查询结果,方便实现分页、更新和删除操作。 5. **事务处理**:JDBC提供了对ACID(原子...
4. **执行查询**: 执行SQL语句,并获取`ResultSet`。 5. **处理结果**: 遍历`ResultSet`,获取和处理查询结果。 6. **关闭资源**: 最后,确保关闭`ResultSet`、`Statement`和`Connection`,以释放系统资源。 在实际...
### 执行SQL语句并通过ArrayList返回结果:字段名统一大写 #### 一、概述 ...通过以上步骤,我们可以成功地使用JDBC连接数据库,执行SQL语句,并将查询结果存储到`ArrayList`中返回,满足了题目中的需求。
3. 执行SQL语句:创建Statement或PreparedStatement对象,然后调用其executeQuery()或executeUpdate()方法。 4. 处理结果:对于查询结果,可以使用ResultSet对象遍历数据;对于更新操作,可以获取影响行数。 5. 关闭...
5. **批处理**:对于多条相似的SQL语句,可以使用批处理功能提高执行效率。 6. **游标支持**:可以使用游标在结果集中前后移动,方便处理大量数据。 7. **数据库元数据**:通过`DatabaseMetaData`接口获取数据库的...
5. **批处理**:使用`BatchUpdateException`批量执行多条SQL语句,提高效率。 6. **游标**:通过设置不同的游标类型,控制数据的读取方式,如只进、可滚动等。 7. **元数据查询**:获取数据库、表、列等的元数据信息...
SQLJDBC驱动程序允许Java开发者使用标准的JDBC API来执行SQL语句、处理结果集、事务管理和数据库连接管理。这些驱动程序在Java应用服务器、Web应用,如JSP(JavaServer Pages)中特别有用,因为它们提供了跨平台的...
总的来说,Java中的JDBC提供了一种灵活且强大的方式来处理数据库操作,包括插入记录并获取自增主键。正确地使用预编译的`PreparedStatement`可以提高代码的可读性和安全性,同时,通过设置`RETURN_GENERATED_KEYS`...
对于大量相同或类似的SQL语句,使用批处理可以提高效率。通过`addBatch()`方法添加SQL语句到批处理队列,然后调用`executeBatch()`执行。 8. **关闭资源** 完成数据库操作后,记得关闭`ResultSet`、`Statement`和...
P6spy是一个JDBC Driver的包装工具,p6spy通过对JDBC Driver的封装以达到对SQL语句的监听和分析,以达到各种目的。 p6spy的安装步骤: 1. 下载p6spy的安装包 2. 把p6spy的jar包放到Classpath中,如果是WEB App...
JDBC是Java平台上的一个标准API,允许Java开发者执行SQL语句,进行数据查询、更新和删除操作。SQL Server 2000是微软公司推出的关系型数据库管理系统,广泛应用于企业级数据存储和管理。 描述中的“for sql server ...
4. `ResultSet`: 执行查询后返回的结果集,可以遍历并获取数据。 在使用SQL Server JDBC Driver时,开发者通常需要执行以下步骤: 1. 加载和注册驱动:`Class.forName(...
另一种方法是使用原生SQL查询,这样可以直接控制SQL语句的生成,包括使用LIMIT和OFFSET关键字(对于MySQL等数据库)或ROW_NUMBER()函数(对于SQL Server)来实现分页。这同样可以绕过Hibernate的默认只进结果集行为...