- 浏览: 565305 次
- 性别:
- 来自: 南京
文章分类
- 全部博客 (350)
- Sybase (30)
- SQL SERVER2005 (14)
- 数据库 (27)
- SSH框架 (27)
- WebService (21)
- 下载-软件收藏 (15)
- 随笔-日常使用 (9)
- Flex 相关 (13)
- Linux (11)
- Web (64)
- XML相关 (9)
- Socket相关 (1)
- Elipse (3)
- 统计报表 (11)
- 线程相关 (3)
- Java相关 (37)
- JAVASCRIPT (19)
- JAVA反射 (3)
- JSP标签 (3)
- 随笔-其他 (2)
- 随笔-设计模式 (3)
- 随笔-架构师相关 (1)
- 下载-源码 (7)
- 下载-帮助文档 (1)
- 下载-插件 (6)
- 技术-.NET (2)
- 技术-Excel VBA (8)
- 应用-地图相关 (2)
- 应用-GSM短信猫 (5)
- 应用-单点登录 (3)
- Android相关 (3)
最新评论
-
sucheng2016:
发现jconn4.jar 里面有getBlob(String) ...
Sybase15驱动包的问题com.sybase.jdbc3.jdbc.SybDriver -
sucheng2016:
java.lang.UnsupportedOperationE ...
Sybase15驱动包的问题com.sybase.jdbc3.jdbc.SybDriver -
ok123zxx:
没下文了吗
通过 Tomcat Advanced I/O 获得高性能的 Ajax tocmat6+CometProcessor -
q1345111:
大家这个问题 尚未完成方法 com.sybase.jdbc3. ...
Sybase15驱动包的问题com.sybase.jdbc3.jdbc.SybDriver -
bdk82924:
heshujing217187 写道问题同1楼一样,求解!换j ...
Sybase15驱动包的问题com.sybase.jdbc3.jdbc.SybDriver
转自:http://xdwangiflytek.iteye.com/blog/1358080
c、 JDBC分页,通过Statement的statement.setMaxRow(endIndex)和resultSet.absoulte(beginIndex)取得当前页范围内的记录。此种方式的性能依赖于厂商对JDBC规范的实现。这种方式的通用性是最好的,性能也不错,完全与数据库平台无关了。
---
不知道大家做项目做到最后有什么感觉没有,其实大家做来做去就是做一个列表加上分页和多条件的查询(http://xdwangiflytek.iteye.com/blog/1358261),只是不同的项目业务流程不一样而已,所以今天我想说说这里的分页。 1、 大家需要了解的是为什么我们需要分页? 因为当数据量太大时,会影响查询和传输的性能,并且我们从用户角度来考虑的话,如果让用户一次性看到成千上万条记录那用户也会疯掉的。 2、 对我们来说有哪些可实现的分页技术? a、 存储过程分页,即在数据库中创建一个存储过程,传入SQL和页码获取当前页的记录,这个需要大家对存储过程有比较好的认识(我这块不行),当然这个从性能上来说是最好的,但是不能跨数据库平台。 b、 使用数据库专有SQL语句进行分页(Oracle的rownum、MSSQL的top、MySql的limit等),性能也很好,但是还是不能跨数据库(其实真实项目中没那么多项目要求都跨数据库)。 c、 JDBC分页,通过Statement的statement.setMaxRow(endIndex)和resultSet.absoulte(beginIndex)取得当前页范围内的记录。此种方式的性能依赖于厂商对JDBC规范的实现。这种方式的通用性是最好的,性能也不错,完全与数据库平台无关了。 d、 根据数据库类型自动生成数据库专有特性的sql语句,其实说白了也就是Hibernate的实现方式,这个自己也写过一个,其实就是根据数据库类型生成不同的数据库SQL专有语句而已。 下面我们需要写一个分页工具类,在写之前我们需要弄明白分页的原理。为了能够取得指定页码所对应的记录,我们是不是需要两个关键的参数:总记录数和每页的记录数; 每页的记录数我们可以设置一个默认值,10、15、20、25都无所谓,根据实际需求。 总记录数就没办法了,需要额外从数据库中利用Count函数取了,通过这两个参数我们是不是可以计算出总页数。同时我们也可以判断用户传过来的页码是否有效(小于第一页OR超出最后一页),然后我们再根据页码和每页记录数是不是就可以计算出当前页的的开始条数和终止条数了。 下面我们就需要来看看分页的工具类了 继续 在后台获取前台传进来的页码 //从页面取得页码 数据访问层,StduentDao.java 其实仔细想想JDBC分页的性能与页码有关即与statement.setMaxRows有效,越往后翻,性能越差,因为越往后一次性查询的记录数就多,但是我们从用户的角度来看不会有用户会牛逼的一页一页翻到第n页去,一般都是根据条件来缩小查询范围。所以折中的办法就是将记录数设大一点,另外就是限制用户翻页的范围,其实这些性能的前提都是在数据量非常大的情况下而言的,一般数据量少的话,基本上都可以忽略不计的。
package com.iflytek.page;
/**
* 分页工具类
*
* @author xudongwang 2012-1-19
*
* Email:xdwangiflytek@gmail.com
*/
public class Page {
/**
* 总记录数
*/
private int totalRow;
/**
* 每页记录数
*/
private int pageSize = 10;
/**
* 当前页码
*/
private int currentCount;
/**
* 总页数
*/
private int total;
/**
* 起始记录下标
*/
private int beginIndex;
/**
* 截止记录下标
*/
private int endIndex;
/**
* 构造方法,使用总记录数,当前页码
*
* @param totalRow
* 总记录数
* @param currentCount
* 当前页面,从1开始
*/
public Page(int totalRow, int currentCount) {
this.totalRow = totalRow;
this.currentCount = currentCount;
calculate();
}
/**
* 构造方法 ,利用总记录数,当前页面
*
* @param totalRow
* 总记录数
* @param currentCount
* 当前页面
* @param pageSize
* 默认10条
*/
public Page(int totalRow, int currentCount, int pageSize) {
this.totalRow = totalRow;
this.currentCount = currentCount;
this.pageSize = pageSize;
calculate();
}
private void calculate() {
total = totalRow / pageSize + ((totalRow % pageSize) > 0 ? 1 : 0);
if (currentCount > total) {
currentCount = total;
} else if (currentCount < 1) {
currentCount = 1;
}
beginIndex = (currentCount - 1) * pageSize;
endIndex = beginIndex + pageSize;
if (endIndex > totalRow) {
endIndex = totalRow;
}
}
public int getTotalRow() {
return totalRow;
}
public int getPageSize() {
return pageSize;
}
public int getCurrentCount() {
return currentCount;
}
public int getTotal() {
return total;
}
public int getBeginIndex() {
return beginIndex;
}
public int getEndIndex() {
return endIndex;
}
}
int currentPage = 1;
try {
currentPage = Integer.parseInt(request.getParameter("currentPage"));
} catch (Exception ex) {}
//取得总记录数,创建Page对象
int totalRow = studentDao.getAllStudents();//通过select count 取得总记录数
Page page = new Page(totalRow, currentPage);
studentDao.list(page);
public List<Stduent> getStudentsByPage(Page page) {
List<Stduent> students = new ArrayList<Stduent>();
try {
String sql = "SELECT id,name,email FROM tbl_stduent";
Connection conn = null;
try {
conn = DbUtil.getConnection();
Statement statement = conn.createStatement();
statement.setMaxRows(page.getEndIndex());//关键代码,设置最大记录数为当前页记录的截止下标
ResultSet resultSet = statement.executeQuery(sql);
if (page.getBeginIndex() > 0) {
resultSet.absolute(page.getBeginIndex());//关键代码,直接移动游标为当前页起始记录处
}
while (resultSet.next()) {
Stduent student = new Student();
……
students.add(student);
}
resultSet.close();
statement.close();
} finally {
if (conn != null) {
conn.close();
}
}
} catch (SQLException e) {
e.printStackTrace();
}
return students;
}
发表评论
-
Mysql 的语法
2015-05-17 20:54 5351、启动 停止 bin/mysql.server star ... -
DbUtils的使用
2013-01-28 19:56 1254DbUtils的使用 今天在看一段源码的时候,看到了可以使用 ... -
NoSQL非关系型数据库
2013-01-22 15:39 943转:http://baike.baidu.com/view/2 ... -
mysql 导入导出函数、存储过程
2012-06-22 16:20 2948mysql常用导出数据命令: 1.mysql导出整个数 ... -
几种数据库的SQL判断表是否存在
2012-02-01 15:35 954Oracle: declarevar_exis ... -
Oracle中实现分页的方法 .
2011-12-12 09:27 1354转:http://blog.csdn.net/andkylee ... -
转:ASE中数据结果集分页功能的三种实现方法 .
2011-12-12 09:26 1139转:http://blog.csdn.net/andkylee ... -
Oracle的定时任务创建
2011-09-09 13:02 947drop sequence s_CarInfoID ... -
数据库下载地址 更新中....
2011-08-02 13:49 828ORACLE 下载(官网) http://www.oracl ... -
Java 调用 Oracle 存储过程返回结果集
2011-07-07 20:01 1459转自:http://wxy0327.itpub.net/ ... -
HugeTable 连接
2011-07-05 13:20 1066JAVA连接HugeTable的代码如下 ... -
Hsqldb安装与使用
2011-07-04 19:45 1099转自:http://fengyongfa2006.blog.1 ... -
SQL语句修改字段类型报错
2011-05-06 10:03 1996Sybase 12.5数据库执行 alter ta ... -
转SQL Server 存储过程的经典分页
2010-06-22 19:18 1333转自:http://www.iteye.com/topic/2 ... -
MySql数据库
2010-06-05 14:33 9551、安装 正在使用5.1版本 ,下载地址 ... ... -
Linux下启动Sybase ASE和IQ
2010-02-01 10:01 4685启动和关闭Sybase ASE sybase@*** ... -
Oracle Win自动备份数据BAT文件
2009-12-21 22:24 1463@echo off REM ################ ... -
Oracle常用及非常用函数
2009-09-22 16:47 808转自: http://wangyu.iteye.com/blo ... -
JDBC使用addBatch一次插入 万条数据
2009-09-22 16:26 2249public class Conn { pub ... -
Linux下启动Oralce
2009-09-22 14:45 907su - oracle sqlplus /nolog ...
相关推荐
java jdbc 分页工具类,以及返回集合数据的封装, private int limit = 10;//每页的个数 /** * 当前页 */ private int page; // /** * 总行数 */ private int totalRows; // /** * 总页数 */ private ...
原创强大的jdbc数据库操作工具类: 1.获取数据源 2.设置数据源 3.获取数据库连接 4.执行insert/delete语句,一个参数列表 public static boolean excute(String sql, List args) 5.执行insert/delete语句,多个参数...
在Java开发中,JDBC(Java Database ...总的来说,JDBC分页查询是Java数据库操作中的常见需求,通过合理设计和优化,可以有效提升应用的性能和用户体验。给定的源码应当提供了具体的实现细节,供开发者参考学习。
1. **JDBC工具类**:JDBC工具类通常封装了数据库连接、预编译SQL语句、执行SQL、关闭资源等常见操作,以减少重复代码,提升开发效率。`connJdbcUtil`可能是一个实现了这些功能的Java类。 2. **数据库连接配置**:...
对于给定的"bk_page"文件,这可能是一个包含分页工具类或者示例代码的压缩包,可以用于直接导入项目并使用。具体实现细节需要查看源代码以了解更多信息,如分页查询是否考虑了性能优化(如预编译SQL,使用存储过程等...
在Java开发中,JDBC(Java ...总之,这个原创的JDBC分页自动映射类是数据库操作的一个实用工具,通过封装和自动化处理,简化了开发流程,提升了开发效率。在使用时,确保遵循作者的版权声明,尊重原创者的劳动成果。
标题中的“Pager(通过的分页工具类)”显然指的是一个用于实现分页功能的Java类。在这个类中,开发者通常会封装分页操作的相关逻辑,以便在各种场景下复用。现在我们来详细探讨一下分页的基本概念、设计原则以及...
这里提到的"分页工具类"是一个专门为实现数据库查询分页功能而设计的自定义组件。下面我们将详细探讨这个分页工具类的可能实现和其关键组成部分。 首先,`PageManager.java`可能是整个分页操作的核心类,它通常会...
总结来说,面向对象的Java JDBC分页查询涉及到创建Page类来存储分页信息,构造Oracle兼容的SQL语句,以及使用PreparedStatement执行查询。在实际开发中,我们还需要关注性能优化、异常处理和代码的可维护性,确保...
在Java编程中,JDBC(Java Database ...总结来说,JDBC分页主要是通过构造带有LIMIT和OFFSET的SQL查询来实现的,结合数据库连接、预编译的SQL语句和结果集的处理,可以在Java应用程序中优雅地完成数据库分页操作。
本篇文章将详细探讨如何使用Java实现一个分页工具类,以及在实际应用中如何运用这个工具。 首先,分页的基本概念是通过指定每页显示的数据量(每页记录数,即pageSize)和当前页数(pageNumber),从数据库中获取...
7. **分页查询**:为了实现分页功能,工具类通常需要接受页码和每页大小作为参数,构造带有LIMIT和OFFSET子句的SQL语句。 8. **异常处理**:工具类应该捕获并处理JDBC相关的异常,如SQLException,以便向调用者提供...
在IT行业中,SpringMVC和JDBC是两个非常重要的组件...此外,随着NoSQL数据库的普及和ORM框架的流行,如Hibernate和MyBatis,开发者在处理数据库操作时有了更多选择,但JDBC作为基础,仍然是理解和解决问题的重要工具。
基于jdbc的封装,轻量级映射,自带连接池,无第三方依赖。支持多数据源,配置简单,支持注解sql查询,自带分页查询。
在这个"jsp+jdbc+servlet分页带增删查改"项目中,开发者使用了MVC(Model-View-Controller)架构模式,实现了对数据的CRUD(Create, Read, Update, Delete)操作,并提供了分页功能。** 1. **JSP(JavaServer Pages...
这个封装工具类的出现是为了提供一种更简洁、易于使用的接口来执行SQL操作,减轻开发者处理数据库连接、事务管理以及异常处理的负担。下面我们将深入探讨SpringJdbcTemplate的相关知识点。 1. **SpringJdbcTemplate...
总的来说,通过自定义的JDBC分页工具集,开发者可以简化数据库操作,提高代码的可读性和可维护性,同时减少重复的分页逻辑。在给定的JavaJDBC项目中,我们可以深入研究源码,了解具体的实现细节,并将其应用到自己的...
在给定的资源中,包含的"PaginationSupport.java"和"PageDao.java"两个工具类,正是为了实现这种功能而设计的。 PaginationSupport.java是分页支持类,通常会包含以下关键知识点: 1. **参数设置**:此类可能包含...
本主题将探讨如何在Hibernate分页类和JDBC的SQL分页方法之间实现完美的融合,以提高性能并提供更好的用户体验。 首先,让我们了解一下Hibernate的分页功能。Hibernate提供了一种方便的方式来处理分页查询,通过...