您的位置:首页 > 编程语言 > Java开发

Java: 分页Paging的实现思路和Demo

2016-10-26 23:51 330 查看
1.为什么要分页?

首先是数据量太大会影响查询和传输的性能,关键是对用户来说一下看到数万条记录也不是那么友好。

2.有哪些分页技术?

a)存储过程分页

在数据库中创建一个存储过程,传入SQL和页码获得当前页的记录。需要对具体数据库的语法相当熟悉才能够编写,当然也可以直接google。性能最好,但不跨数据库平台

b)数据库专有sql特性分页

使用数据库专有的特性(MSSQL的top、Oracle的rownum、MySQL的limit等)实现当前页记录提取。性能也非常好,但也不跨数据库平台

c)纯JDBC分页

通过Statement的setMaxRow(endIndex)和rs.absoulte(beginIndex)仅取得当前页范围内的记录。此种方式的性能依赖于厂商对JDBC规范的实现,如果厂商的rs读取是以流的形式进行的,性能还是有所保障的。这种方式的通用性是最好的,完全与数据库平台无关了。

d)根据数据库类型自动生成数据库专有特性的sql语句

其实这就是Hibernate的实现方法,如果你觉得自己分析SQL语法然后将SQL转换为特定数据库语法比较麻烦,那就用Hibernate吧。

Jdbc分页Demo

package com.myjava.demo.jdbc;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.sql.Statement;

public class JdbcPagingDemo {

private static final int PAGE_SIZE = 2;

public static void main(String[] args){
String queryRowNumSQL = "select count(*) from t_email";
String querySQL = "select * from t_email";
int totalRow;

try(Connection conn = getConnection()){
Statement stat = conn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY);
ResultSet result = stat.executeQuery(queryRowNumSQL);
result.next();
totalRow = result.getInt("count(*)");

for(int beginIndex = 1; beginIndex <= totalRow;beginIndex += PAGE_SIZE){
int endIndex = (beginIndex + PAGE_SIZE - 1) > totalRow ? totalRow : (beginIndex + PAGE_SIZE - 1);
System.out.println("beginIndex : " + beginIndex + ", endIndex : " + endIndex);
stat.setMaxRows(endIndex);
result = stat.executeQuery(querySQL);
result.absolute(beginIndex - 1);
while(result.next()){
ResultSetMetaData metaData = result.getMetaData();
for(int i = 1; i <= metaData.getColumnCount();i++){
if(i == 1)
System.out.print(result.getString(i));
else
System.out.print("\t"+result.getString(i));
}
System.out.println();
}
}

stat.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

}

private static Connection getConnection() throws SQLException{
String driver = "com.mysql.jdbc.Driver";
String url="jdbc:mysql://localhost:3306/vis_email";
String username = "root";
String password = "123456";
try {
Class.forName(driver);
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return DriverManager.getConnection(url,username,password);
}

}


Reference:

http://noahark007.blog.163.com/blog/static/5716526720122178844841/
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  java 分页 数据库