- 因为离线RowSet是将结果集读取到内存中的,如果数据库太大的话,一次性读取到内存中,可能会造成内存溢出,所以RowSet还提供了分页功能,即每次只装载数据库中的某几行数据。
- CachedRowSet提供了以下方法来控制分页
- populate(ResultSet rs, int StartRow)从第几行开始装在数据
- SetPageSize(int PageSize)每一页的大小(即每次从数据库中读取多少行数据)
- 具体的讲解穿插在代码中
import javax.sql.rowset.CachedRowSet; import javax.sql.rowset.RowSetFactory; import javax.sql.rowset.RowSetProvider; import java.io.FileInputStream; import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.Statement; import java.util.Properties; public class PagesTest { private static String driver; private static String url; private static String user; private static String pass; public void initParam(String fileName) throws Exception{ Properties prop = new Properties(); prop.load(new FileInputStream(fileName)); driver = prop.getProperty("driver"); url = prop.getProperty("url"); user = prop.getProperty("user"); pass = prop.getProperty("pass"); } public CachedRowSet query(String sql, int pageSize, int page) throws Exception{ Class.forName(driver); try( Connection conn = DriverManager.getConnection(url, user, pass); Statement stmt = conn.createStatement(); ResultSet rs = stmt.executeQuery(sql)) { RowSetFactory factory = RowSetProvider.newFactory(); CachedRowSet cacheRs = factory.createCachedRowSet(); // 设置每页显示的行数,也就是说每次装填到CachedRowSet中的行数是多多少 cacheRs.setPageSize(pageSize); // 将rs中第几行开始装填到CachedRowSet中 cacheRs.populate(rs, (page -1) * pageSize + 1); return cacheRs; } } public static void main(String args[]) throws Exception{ PagesTest pagesTest = new PagesTest(); pagesTest.initParam("mysql.ini"); CachedRowSet rs = pagesTest.query("select * from students", 2,1); while (rs.next()){ System.out.println(rs.getString(1) + "\t" + rs.getString(2)); } } } //运行程序,看到以下输出 // S2 Marry // S3 Tom
java数据库编程(11) 查询结果分页
猜你喜欢
转载自blog.csdn.net/weixin_39452731/article/details/83045180
今日推荐
周排行