离线RowSet的查询分页
2017-07-28 16:00 耳朵嫁给了真正的谎 阅读(420) 评论(0) 收藏 举报package MysqlTest;
import java.io.FileInputStream;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.Properties;
import javax.sql.rowset.CachedRowSet;
import javax.sql.rowset.RowSetFactory;
import javax.sql.rowset.RowSetProvider;
import com.mysql.jdbc.Statement;
/*
* 使用cachedrowset实现分页的代码,主要RowSetFactory实现了离线功能。
* 使用ResultSet的时候必须保证在线(即保持与数据库的连接),连接后必须立即处理,否则连接断开则ResultSet也将关闭
* 现在RowSet的标准已经更加全面和完善,与ResultSet相比RowSet默认就是可滚动、可更新、可序列话的,无需打开任何开关,并且操作上比ResultSet更加简单;
* RowSet调用populate包装ResultSet的过程就叫装填,即直接将ResultSet连接数据库返回的全部结果集装填到RowSet中;
* 指针使用方法都相同,实在不清楚就百度吧。
*/
public class CachedRowSetPage {
private String driver;
private String url;
private String user;
private String password;
public void init(String paramFile) throws Exception//以下均为JDBC连接数据库的基本步骤,还不清楚的可以参考Java 通过JDBC连接Mysql数据库的方法和实例【图文说明】 - 陶伟基Wiki - 博客园 http://www.cnblogs.com/taoweiji/archive/2012/12/11/2812852.html
{
Properties props = new Properties();
props.load(new FileInputStream(paramFile));
driver = props.getProperty("driver");
url = props.getProperty("url");
user = props.getProperty("user");
password = props.getProperty("password");
}
public CachedRowSet query(String sql,int pageSize,int page) throws Exception
{
Class.forName(driver);
CachedRowSet cachedRs=null;
try(Connection conn = DriverManager.getConnection(url,user,password);//获取数据库连接
java.sql.Statement stmt = conn.createStatement();
ResultSet rs = stmt.executeQuery(sql))
{
RowSetFactory factory = RowSetProvider.newFactory();//使用RowSetFactory创建Rowsetpactory
cachedRs = factory.createCachedRowSet();//创建默认的cacherowset实例
cachedRs.setPageSize(pageSize);//设置每页显示pagesize记录
cachedRs.populate(rs,(page-1)*pageSize+1);//使用resultset装填rowset,设置从第几条记录开始
}catch (SQLException e)
{
e.printStackTrace();
}
return cachedRs;
}
public static void main(String[] args) throws Exception
{
CachedRowSetPage cp = new CachedRowSetPage();
cp.init("db.properties");
CachedRowSet rs = cp.query("select * from students",1,2);//此处需要注意的是自己数据表中有多少数据,别超出了。
while(rs.next())//向后滚结果集
{
System.out.println(rs.getString(2));
}
}
}