| |
真爱的事业和真正的爱情一生只有一次,都值得我们温柔地相待,因为那种感觉是永远都无法复制的, 这世界真正属于你的东西其实并不多,你不好好珍惜,它便会离你而去,包括机遇,包括爱情,包括生命。 不要找任何理由, 当幸福在你身边的时候就抓住它,你就一定会很幸福! |
| 时 间 记 忆 |
| « | September 2025 | » | | 日 | 一 | 二 | 三 | 四 | 五 | 六 | | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | | | | | |
|
blog名称:玻璃杯中的花生壳 日志总数:162 评论数量:249 留言数量:1 访问次数:827559 建立时间:2004年11月4日 |
 | | |
|
| |
| JAVA实现关系数据库的翻页 by masse@CSDN:
这个方法没有什么特别的,其实也算不上原创。也是在学习中得出来的。因此如果侵犯了别人的权益,请来信通知。为了方便初学者了解原理,代码中我没有使用任何框架。代码可以适用于mysql,oracle,sqlserver,db2等等主流关系数据库。 以下代码是我从自己以前写的程序中抽取出来的核心,只能表述思路,如要使用,可能还需要很多调整。
(1) 数据库表sys_User定义如下: ID Name Email Desc … 1 masse karkaiy_007@163.com 当午 … 其中,ID为整型,其它均为字符串。
(2) User类,请自行为每个方法添加getter和setter方法。为了方便,我写了User(ResultSet)这个构造函数。public class User{ public User(ResultSet rs) { id = rs.getInt("ID"); name = rs.getString("Name"); email = rs.getString("Email"); desc = rs.getString("Desc"); } private int id; private String name; private String email; private String desc;}
(3) sysUserTable类,用于数据库读取,我这里仅仅给出了最核心部分。其中对于start,count等的有效性参数,请自行判断;sql语句如果有查询的filter,或者order等语句,也可根据情况自行调整。我只给出程序框架。
// 取出从start开始的count条记录。如,start为1,count为20,则取出数据库前20条记录public class SysUserTable{ public List getUsers(Connection conn, int start, int count) throws Exception { PreparedStatement pStmt = null; ResultSet rs = null; List result = new ArrayList(); try { String sql = "SELECT * FROM sys_User"; pStmt = conn.preparedStatement(sql); rs = pStmt.executeQuery(); if (rs.absolute(startRow)) { result.add(new User(rs)); for (int rowIndex = 0; rowIndex < rowCount - 1; rowIndex++) { if (!rs.next()) { break; } result.add(new User(rs)); } } } catch (Exception e) { throw e; // process exception here } finally { // close rs & pStmt here } return result; }}
(4) JSP页面的实现。基本的思路就是,根据当前页数,计算出需要的start即可。如指定每页count条,当前在第n页,那么start=(n-1)*count+1。然后作为参数,即可得到翻页结果集。具体的实现可以用传统的翻页,也可用ajax。这里灵活性很大,就不再赘述了。
方法很简单,都有些不要意思贴出来。但是觉得优势有以下(1)没有使用任何框架,适合初学者,也适合对某些成型系统进行升级修改。同时扩展性很强。(2)使用几乎所有的关系数据库,因为没有使用任何特殊的sql语法。比如top ,limit,rownum等等,sql也可以根据情况修改,实现任何查询的翻页。(3)性能:具体性能没有经过测试,以前在一个复杂的应用下,测过50万的数据,还不错。如果应用简单,这个性能指数会有所上升。
-------------------------------------------------------我具体实现里面全是接口,而且代码是写了另外的代码来自动生成的,相当于是自己实现的一套框架(那个框架最初是一个同事写的,很牛的人)。
最后封装的形式如下
public interface Service{ public int getUserCount()throws Exception; public int getUserCount(String filter)throws Exception; public List getUsers()throws Exception; public List getUsers(String filter)throws Exception; public List getUsers(int start ,int count)throws Exception; public List getUsers(String filter,int start ,int count)throws Exception; public List getUsers(String filter,int start ,int count,String[] sortNames,int[] sortTypes)throws Exception;}
仅一个单独的实体表相关的接口就有几十个。因为是用自己写的框架生成的,所以也不存在工作量的问题。
---------------------------------------------------
整个系统的底层都从上面的接口作为入口,所有相关的数据库操作,都封装以达到事务安全。也不会把连接暴露出来。在security方面,可以再加入接口调用的登陆认证。
如果要针对数据库优化,只需要改动生成代码的框架,改里面的代码模板,改几行,就能实现代码的重构。。
我给出的仅仅是通用数据库无框架实现翻页的雏形罢了
---------------------------------------------------
|
|
| | |
|