锁定老帖子 主题:SqlServer的一个分页工具类
精华帖 (0) :: 良好帖 (2) :: 新手帖 (0) :: 隐藏帖 (7)
|
|
---|---|
作者 | 正文 |
发表时间:2010-04-13
最后修改:2010-04-13
SqlServer的一个分页工具类,主要功能有为据传入的参数生成sql语句,或者根据传入的参数直接返回一个ResultSet对象。
/** * */ package com.woxiaoe.ework.util; import java.sql.CallableStatement; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import java.util.HashMap; import java.util.Map; import javax.sql.DataSource; import org.apache.log4j.Logger; import org.gdb.common.DataSourceFactory; import org.springframework.dao.DataAccessException; import org.springframework.jdbc.core.CallableStatementCallback; import org.springframework.jdbc.core.JdbcTemplate; import org.springframework.jdbc.datasource.DataSourceUtils; /** * 分页工具类 * @author 小e * * 2010-1-1 下午07:46:04 */ public class PaginationUtil { private Map<ResultSet,Connection> currentConn = new HashMap<ResultSet, Connection>(); public String getPaginationSql(int start,int limit,String tableName,String fields,String filter,String orderBy){ String sql = "SELECT TOP " + limit +" * FROM " + "( " + "SELECT ROW_NUMBER() OVER (ORDER BY " + orderBy + ") AS RowNumber," + fields +" FROM " + tableName + ((filter != null)?" where " + filter:"") + ") A " + " WHERE RowNumber > " + start ; return sql; } public ResultSet query(int start,int limit,String tableName,String fields,String filter,String orderBy){ Connection conn = DataSourceUtils.getConnection(DataSourceFactory.getDataSource()); PreparedStatement pstmt; ResultSet rs = null; try { pstmt = conn.prepareStatement(getPaginationSql(start,limit,tableName,fields,filter,orderBy)); rs = pstmt.executeQuery(); currentConn.put(rs, conn); } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } return rs; } public void releaseConn(ResultSet rs){ Connection conn = currentConn.get(rs); currentConn.remove(rs); DataSourceUtils.releaseConnection(conn, DataSourceFactory.getDataSource()); } } 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2010-04-13
LZ有这样的想法,说明你也上道了,再花点时间写个SqlUtil吧
基本上直接和数据库交互的程序员都会写个SqlUtil或想写个(hibernate除外) 加油 另外,最好别用String,用Stringbuilder |
|
返回顶楼 | |
发表时间:2010-04-13
lyw985 写道 LZ有这样的想法,说明你也上道了,再花点时间写个SqlUtil吧
基本上直接和数据库交互的程序员都会写个SqlUtil或想写个(hibernate除外) 加油 另外,最好别用String,用Stringbuilder 的确,用StringBuilder或这个StringBuffer比较合适; 把这个public String getPaginationSql( 方法sql改下也可以应用到Oracle中。 |
|
返回顶楼 | |
发表时间:2010-04-13
楼主不介意的话,我提点不同的意见。
1,职责不单一,PaginationUtil 既分页,又有管理连接的功能。 2,关键方法参数太多,不易于使用。 本人不太懂java,胡乱说的。实在罪过。 |
|
返回顶楼 | |
发表时间:2010-04-14
想知道还有人嫩么用吗?
|
|
返回顶楼 | |
发表时间:2010-04-14
觉得楼主开发的可能是基于SqlServer2005的工具吧,SqlServer2000分页工具好像比较复杂的,用StringBuilder最好,一般不用String的+操作
|
|
返回顶楼 | |
发表时间:2010-04-14
justlive 写道 楼主不介意的话,我提点不同的意见。
1,职责不单一,PaginationUtil 既分页,又有管理连接的功能。 2,关键方法参数太多,不易于使用。 本人不太懂java,胡乱说的。实在罪过。 之前这个方法是调用存储过程分页,需要传入那些参数,同时需要管理Connection,后来将分页过层改为通过sql语句分页,当不希望之前的代码有太大变化,所以保留了之前的参数样式。query方法是为了和之前的兼容,同样是返回ResultSet对象,这样其他的地方就无需修改了。后面的操作都是基于getPaginationSql得到sql参数自己分页,几乎没用到query。 之前的项目中用SqlServer做数据库,分页搞了好久,最后用这种模式,大家用SqlServer开发的时候分页一般是用哪种方式? |
|
返回顶楼 | |
发表时间:2010-04-14
最后修改:2010-04-14
|
|
返回顶楼 | |
发表时间:2010-04-14
webeasymail 写道 之前的项目中项目经理不让用hibernate,所以要开发中就只能那样处理了。 |
|
返回顶楼 | |
发表时间:2010-04-14
whaosoft 写道 想知道还有人嫩么用吗?
说的不错,但楼主应该只是展示个功能方法给大家讨论下,不必深究 |
|
返回顶楼 | |