`
woxiaoe
  • 浏览: 283303 次
  • 性别: Icon_minigender_1
  • 来自: 长沙
社区版块
存档分类
最新评论

SqlServer的一个分页工具类

    博客分类:
  • Java
阅读更多

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());
	}
}
分享到:
评论
12 楼 zjhlht 2010-04-14  
看着楼主的功能还需要改进,在改进改进吧!

如果愿意的话就把源码发出来吧!在我自己的项目里用用,感觉能提升很多!
11 楼 xiangkun 2010-04-14  
这也叫分页工具类!!!!!!
10 楼 finallygo 2010-04-14  
这样的话,sql语句还是和分页语句耦合了,怎么才能完全去除这种关系呢?
9 楼 XTU_xiaoxin 2010-04-14  
whaosoft 写道
想知道还有人嫩么用吗?


说的不错,但楼主应该只是展示个功能方法给大家讨论下,不必深究
8 楼 woxiaoe 2010-04-14  
webeasymail 写道
 

 

LZ精神可嘉~ 呵呵 ,建议楼主看看HIBERNATE对列表和分页的处理 

 

这个是很久前写的了,也许符合楼主的需求!

 

http://webeasymail.iteye.com/blog/247881


之前的项目中项目经理不让用hibernate,所以要开发中就只能那样处理了。
7 楼 webeasymail 2010-04-14  
<p> </p>
<p> </p>
<p>LZ精神可嘉~ 呵呵 ,建议楼主看看HIBERNATE对列表和分页的处理 </p>
<p> </p>
<p>这个是很久前写的了,也许符合楼主的需求!</p>
<p> </p>
<p><a href="http://webeasymail.iteye.com/blog/247881">http://webeasymail.iteye.com/blog/247881</a></p>
6 楼 woxiaoe 2010-04-14  
justlive 写道
楼主不介意的话,我提点不同的意见。

1,职责不单一,PaginationUtil 既分页,又有管理连接的功能。
2,关键方法参数太多,不易于使用。


本人不太懂java,胡乱说的。实在罪过。


之前这个方法是调用存储过程分页,需要传入那些参数,同时需要管理Connection,后来将分页过层改为通过sql语句分页,当不希望之前的代码有太大变化,所以保留了之前的参数样式。query方法是为了和之前的兼容,同样是返回ResultSet对象,这样其他的地方就无需修改了。后面的操作都是基于getPaginationSql得到sql参数自己分页,几乎没用到query。
之前的项目中用SqlServer做数据库,分页搞了好久,最后用这种模式,大家用SqlServer开发的时候分页一般是用哪种方式?
5 楼 mp_juan 2010-04-14  
觉得楼主开发的可能是基于SqlServer2005的工具吧,SqlServer2000分页工具好像比较复杂的,用StringBuilder最好,一般不用String的+操作
4 楼 whaosoft 2010-04-14  
想知道还有人嫩么用吗?
3 楼 justlive 2010-04-13  
楼主不介意的话,我提点不同的意见。

1,职责不单一,PaginationUtil 既分页,又有管理连接的功能。
2,关键方法参数太多,不易于使用。


本人不太懂java,胡乱说的。实在罪过。
2 楼 sokoo108 2010-04-13  
lyw985 写道
LZ有这样的想法,说明你也上道了,再花点时间写个SqlUtil吧

基本上直接和数据库交互的程序员都会写个SqlUtil或想写个(hibernate除外)

加油


另外,最好别用String,用Stringbuilder

的确,用StringBuilder或这个StringBuffer比较合适;

把这个public String getPaginationSql( 方法sql改下也可以应用到Oracle中。
1 楼 lyw985 2010-04-13  
LZ有这样的想法,说明你也上道了,再花点时间写个SqlUtil吧

基本上直接和数据库交互的程序员都会写个SqlUtil或想写个(hibernate除外)

加油


另外,最好别用String,用Stringbuilder

相关推荐

    java语言的分页查询功能(mysql和sql server)

    例如,MyBatis的`selectList`方法可以接受一个`RowBounds`对象,实现分页功能。 总结,Java中的分页查询涉及数据库操作、SQL构造和Java代码实现。理解分页原理和数据库分页语法,掌握JDBC基本用法,再根据实际需求...

    SSH框架+SQLServer实现分页的小项目

    在实际开发中,为了代码的复用性和易维护性,通常会创建一个通用的分页工具类或Service,使得分页逻辑可以独立于具体的业务。 **总结** 这个"SSH框架+SQLServer实现分页的小项目"提供了一个基础的分页实现示例,...

    sqlserver 实现分页的前台代码 以及后台的sqlserver语句

    在后端,我们需要处理分页请求,生成对应的SQL Server分页查询语句,并返回结果。这里假设使用Java的Servlet或Spring MVC来处理请求。 1. SQL Server分页语句: SQL Server提供了多种方式实现分页,比如`ROW_NUMBER...

    Java Web实例:Eclipse3.2+Tomcat5.5+Sql Server2000实现的分页数据查询

    接下来,创建一个Servlet,例如“PaginationServlet”,它负责接收前端的请求参数,如当前页码和每页显示的记录数,然后调用“DatabaseUtil”类进行分页查询。在Servlet中,我们还需要计算总页数,并将查询结果及...

    分页工具类

    为了提高代码的可复用性和可维护性,分页工具类可能会设计成一个静态工具类,提供如`getPageBySQL(String sql, int currentPage, int pageSize)`这样的静态方法,接收基础的SQL语句和分页参数,返回一个`Page`对象。...

    java分页工具类

    这里的"java分页工具类"就是为了解决这一问题而设计的,它允许开发者通过指定起始页号和每页显示的条数来实现高效且灵活的分页功能。 分页的核心思想是将数据库中的数据分割成多个部分,每次只加载一部分(即一页)...

    SpringMVC+Mybatis实现的SqlServer整合逆向工程Example类分页带条件数据查询

    【SpringMVC+Mybatis与SqlServer整合实现分页条件查询】\n\n在SpringMVC和Mybatis框架中,结合SqlServer数据库进行数据查询时,往往需要处理大量的数据,此时分页查询显得尤为重要。本篇文章将详细讲解如何在Sql ...

    struts+hibernate+sql server2005分页的小项目

    本项目以"Struts+Hibernate+SQL Server 2005"的技术栈实现了一个简单的分页小项目,下面我们将详细探讨这个项目中的关键技术点。 **1. Struts框架** Struts是Apache组织下的一个开源MVC框架,主要用于构建Java Web...

    java连接sql server2008工具包

    Java连接SQL Server 2008工具包是一个用于在Java应用程序中与Microsoft SQL Server 2008 R2数据库交互的必备组件。这个工具包主要包含数据库驱动程序,使得Java开发者能够利用Java Database Connectivity (JDBC) API...

    Microsoft SQL Server 2005技术内幕:存储引擎(中文).pdf

    除此之外,她还是SQL Server Magazine的优秀编辑和专栏作家,她还写作了大量的SQL Server类书籍,包括著名的Inside Microsoft SQL Server2000。 目录 前言 致谢 引言 第1章 SQL Server 2005 的安装与升级  1.1 ...

    实现ORACLE与SQLSERVER数据库间的数据抽取与转换工具

    在IT行业中,数据抽取、转换和加载(ETL)是数据仓库和大数据...这个工具的源代码压缩包"复件 zExtractor"可能是实现这些功能的具体代码实现,对于想要深入了解或定制这类工具的IT从业者来说,是一个宝贵的参考资料。

    sqlserver.jar

    `sqlserver.jar` 是一个与 Microsoft SQL Server 数据库交互的 Java 驱动程序包,主要用于 JDBC(Java Database Connectivity)应用程序。JDBC 是 Java 平台中的一个标准接口,允许 Java 程序连接到各种数据库,包括...

    基于SQL的分页查询功能,很强大的哦

    在.NET中,通常会创建一个包含当前页码、每页大小以及查询条件的模型类,然后在服务层或数据访问层执行对应的SQL查询,返回分页结果。 总结一下,本文介绍了SQL的分页查询原理和常见实现方式,包括MySQL的LIMIT和...

    mybatis连接sqlserver2014代码生成工具包

    总的来说,"mybatis-sqlserver2014"工具包提供了一种便捷的方式,帮助开发者快速地生成与SQL Server 2014数据库交互的MyBatis代码。通过合理的配置和使用,可以显著提高开发效率,减少手动编写SQL和Java代码的工作量...

    SQL SERVER版代码生成工具(2004版)

    本版本是04年当时开发项目时,为了节省工作量,开发的一个辅助工具,能够完全生成数据操作层代码 数据库操作中,包括了添加、删除、修改、获取单条记录、批量记录、分页获取六中基本方法 使用中有一个唯一的条件...

    JSP,用于分页显示的两个工具类

    在给定的资源中,包含的"PaginationSupport.java"和"PageDao.java"两个工具类,正是为了实现这种功能而设计的。 PaginationSupport.java是分页支持类,通常会包含以下关键知识点: 1. **参数设置**:此类可能包含...

    sqljdbc42_sqlserver_jdbc_Driver_zip_驱动_

    标题中的"sqljdbc42_sqlserver_jdbc_Driver_zip_驱动_"表明了这是一个与SQL Server数据库连接相关的Java JDBC驱动程序的压缩包,具体版本为42。描述中的"sqlserver jdbc驱动 42版本"进一步确认了这是针对SQL Server...

    基于三层Vs.net+SQLServer2005实现单张表的CRUD(GridView带分页).

    【标题】"基于三层Vs.net+SQLServer2005实现单张表的CRUD(GridView带分页)",这个项目展示了如何使用Microsoft的Visual Studio .NET(Vs.net)开发工具,结合SQL Server 2005数据库管理系统,来创建一个简单的数据...

    android用xfire操作sqlserver源代码

    1. 创建Java服务类:在服务端,你需要创建一个Java类,该类包含对SQL Server数据库的操作方法,如查询、插入、更新和删除等。这些方法需要使用JDBC(Java Database Connectivity)驱动来与SQL Server建立连接,并...

Global site tag (gtag.js) - Google Analytics