`
mimang2007110
  • 浏览: 237331 次
  • 性别: Icon_minigender_1
  • 来自: 西安
社区版块
存档分类
最新评论

【转】java调用sybase存储过程 实现分页

阅读更多
1、   sybase的分页存储过程,这个是从网上搜的

CREATE PROCEDURE GetDataByPage
(
    --创建一个分页读取过程
 @SqlStr         varchar(8000), --SQL语句
 @PageSize       int,   --每页记录数
 @CurrentPage    int    --当前页数
)
AS
DECLARE @FirstRec int, @LastRec int, @dt varchar(10) --页起始行,页结束行,生成临时表的随机数
BEGIN

 SELECT @FirstRec = (@CurrentPage - 1) * @PageSize --计算页起始行
 SELECT @LastRec = (@CurrentPage * @PageSize + 1) --计算页结束行
 
 SELECT @dt= substring(convert(varchar,rand()),3,10) --一个字符型的随机数
 
 --将搜索结果放入临时表中,表名随机生成,在' FROM '前插入'INTO '+随机临时表名
 SELECT @SqlStr = stuff(@SqlStr, charindex(' FROM ',upper(@SqlStr)), 6 ,' INTO tempdb..Paging'+@dt+' FROM ')
 EXECUTE (@SqlStr)
 
 --为临时表增加id号
 SELECT @SqlStr = 'ALTER TABLE tempdb..Paging'+@dt+' ADD TEMPDB_ID numeric(10) IDENTITY PRIMARY KEY'
 EXECUTE (@SqlStr)
 
 --计算临时表中的记录数
 --SELECT @SqlStr = 'SELECT Count(*) From tempdb..Paging'+@dt
 --EXECUTE (@SqlStr)
 
 --选取记录号在起始行和结束行中间的记录
 SELECT @SqlStr = 'SELECT * FROM tempdb..Paging' + @dt                      + ' WHERE TEMPDB_ID > ' + convert(varchar,@FirstRec)                      + ' and TEMPDB_ID < '+convert(varchar,@LastRec)
 EXECUTE (@SqlStr)
 
 --删除临时表
 SELECT @SqlStr = 'DROP TABLE tempdb..Paging'+@dt
 EXECUTE (@SqlStr) 
  
END

直接在命令行执行即可。

2、action类,  

public ActionForward perform(ActionMapping mapping,ActionForm form,HttpServletRequest request,HttpServletResponse response)
   throws IOException, ServletException {
   
  SelectForm selectForm = (SelectForm)form;

  String start1 = request.getParameter("start");
  String maxValue1 = request.getParameter("limit");
  int start = 0;
  int maxValue = 0;
  int totalCount = 0;
  if (validateNumber(start1)) {
   start = new Double(start1).intValue();
  } else {
   start = 1;
  }

  if (validateNumber(maxValue1)) {
   maxValue = new Double(maxValue1).intValue();
  } else {
   maxValue = 10;
  }
  
 

  StringBuffer sql = new StringBuffer();

  sql.append("select a.EMP_ID,a.NAME,a.ID_CARD,a.START_ORG_ID from tb_employee a,tb_organization b where a.START_ORG_ID = b.ORG_ID ");
  
  Connection c = null;
  PreparedStatement ps = null;
  ResultSet res = null;
   list = new ArrayList();
   

//java调用存储过程代码,GetDataByPage是存储过程名称,有三个参数,
      CallableStatement cs = c.prepareCall("{call GetDataByPage(?,?,?)}",ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE);
         cs.setString(1,sql.toString());//查询的sql语句
         cs.setInt(2,maxValue); //每页显示的数量
         cs.setInt(3,start); //页数
         res = cs.executeQuery();//获得存储过程返回的结果集
        //遍历结果集,存储在集合中

   while(res.next()){
    SelectForm select = new SelectForm();
    select.setEmpId(res.getInt(1));
    select.setName(res.getString(2));
    select.setIdCard(res.getString(3));
    select.setStartOrgId(res.getInt(4));
    list.add(select);
   }
  } 
  catch(Exception e){
   e.printStackTrace();
  }finally{   
   try {
//    关闭
    res.close(); 
    ps.close(); 
   } catch (Exception e) {    
    e.printStackTrace();
   }
  }
  //调用分页工厂类
  PageFactory.makeNavigator(mapping, request, start, maxValue, totalCount, true);
  request.setAttribute("list", list);
  return mapping.findForward("success");
 }

3、分页工厂类,可以不做任何修改直接用,

////////////////////////////////////////////////////////////////
// COPYRIGHT (C) 2009 KOAL INTERNATIONAL INFORMATION CORPORATION
//
// ALL RIGHTS RESERVED BY KOAL INTERNATIONAL INFORMATION 
// CORPORATION, THIS PROGRAM MUST BE USED SOLELY FOR THE 
// PURPOSE FOR WHICH IT WAS FURNISHED BY KII CORPORATION ,
// NO PART OF THIS PROGRAM MAY BE REPRODUCED OR DISCLOSED 
// TO OTHERS, IN ANY FORM WITHOUT THE PRIOR WRITTEN 
// PERMISSION OF KII CORPORATION.USE OF COPYRIGHT NOTICE 
// DOES NOT EVIDENCE PUBLICATION OF THE PROGRAM
//
//KOAL INTERNATIONAL INFORMATION CONFIDENTIAL AND PROPROETARY
/////////////////////////////////////////////////////////////////
package com.koal.ra.view;

import javax.servlet.http.HttpServletRequest;

import org.apache.struts.action.ActionMapping;

/**
 * Page.java
 * 
 * @CopyRight KOAL Co. Lmt 2009
 * @author zhengxd
 * @Since 
 * @version 
 * @Date: 2009-8-30
 */
public class PageFactory
{
 private static final String SHOW_NAVIGATOR = "showNavigator";
 
 private static final String TOTAL_RECORDS = "totalRecords";

    private static final String LAST_PAGE = "lastPage";

    private static final String NEXT_PAGE = "nextPage";

    private static final String PRE_PAGE = "prePage";

    private static final String FIRST_PAGE = "firstPage";

    private static final String TOTAL_PAGES = "totalPages";

    private static final String CURRENT_PAGE = "currentPage";

    private static final String BASIC_URL = "basicURL"; //娌℃湁鍒嗛〉鍙傛暟鐨刄RL銆?

    private static final String PAGE_NO = "pageNo";

    private static final String URL_PATTERN = ".do";
    
    public static void makeNavigator(ActionMapping mapping,HttpServletRequest request,int start,int maxValue,int totalCount, boolean showflag){
     if(null == mapping || request == null){
      return;
     }
     String basicUrl = mapping.getPath();
     
     request.setAttribute(TOTAL_RECORDS, String.valueOf(totalCount));
     request.setAttribute("start", String.valueOf(start));

  int currentPage = start;
  request.setAttribute(CURRENT_PAGE, String.valueOf(currentPage));
  
  int totalPages = totalCount/maxValue;
  if(0 != totalCount%maxValue){
   totalPages = totalPages + 1;
  }
  if(0 == totalPages){
   totalPages = totalPages + 1;
  }
  request.setAttribute(TOTAL_PAGES, String.valueOf(totalPages));
  
  if(currentPage > 1){
   request.setAttribute(FIRST_PAGE, CreateURL(basicUrl,0,maxValue));
   request.setAttribute(PRE_PAGE, CreateURL(basicUrl,start-maxValue,maxValue));
  }
  
  if(totalPages > start){
   request.setAttribute(NEXT_PAGE, CreateURL(basicUrl,start+maxValue,maxValue));
   request.setAttribute(LAST_PAGE, CreateURL(basicUrl,(totalPages-1)*maxValue,maxValue));
  }
  
  if(showflag)
  request.setAttribute(SHOW_NAVIGATOR, "true");
  
    }

 /**
  * @param path
  * @param start
  * @param maxValue
  * @return
  */
 private static String CreateURL(String path, int start, int maxValue)
 {
  String url = path + "?start=" + start + "&limit=" + maxValue;
  return url;
 }

}

4,page.jsp   分页的jsp页面,在跳转时,调用主页面的action

<%--该页面是pager2的分页导航条页面。需要使用导航条的页面使用include包含本页面。 --%>
<%--包含本页面之前应该使用《% String actionName="xxxx"; %》,其中的xxxx为点击导航条链接时跳转的页面  -->
<%--xxx使用的路径为跟context无关路径 --%>
<%--hef --%>
<%@ page language="java" pageEncoding="UTF-8"
 contentType="text/html; charset=UTF-8"%>

<%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %>
<%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %>
<%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic" %>

<script language="javascript" type="text/javascript">
function firstPage(){
 document.form.start.value = 1;
 document.form.submit();
}
function prePage(){
 document.form.start.value = parseInt(document.form.start.value) - 1;
 document.form.submit();
}
function nextPage(){
 document.form.start.value = parseInt(document.form.start.value) + 1;
 document.form.submit();
}
function lastPage(){
 document.form.start.value = (document.form.totlePage.value);
 document.form.submit();
}
function prCheck(){
 if(!/^\d*$/.test(document.form.pageNo.value))
 { alert('只能输入大于零的整数');
  
  return false;}
 if (parseInt(document.form.pageNo.value)<1){
  alert('请输入大于零的整数');
  return false;}
 if(document.form.pageNo.value > document.form.totlePage.value){
  alert('输入的值不能大于总页数');
  return false;
 }
 document.form.start.value = (document.form.pageNo.value);
 document.form.submit();
}
</script>
<%
 String contextPath = request.getContextPath();
 String pageNo = String.valueOf(request.getAttribute("totalPages"));
 String start = String.valueOf(request.getAttribute("start"));

 
 if("null".equals(start))
  start="0";
%>
<logic:present name="showNavigator">
<table border="0" cellpadding="0" cellspacing="0"  >
<input type="hidden" name="start" value="<%=start %>"/>
<input type="hidden" name="totlePage" value="<%=pageNo %>"/>

  <tr>
    <td >
    <logic:present name="firstPage">
  
 <a href="javascript:firstPage();"><div class="page-first">首页</a> 
 </logic:present>
 <logic:notPresent name="firstPage">
 <div class="page-first-disable"></div>
 </logic:notPresent>
 
 <logic:present name="prePage">
  <a href="javascript:prePage();">上一页</div></a>
 </logic:present>
 <logic:notPresent name="prePage">
  <div class="page-prev-disabled"></div>
 </logic:notPresent>
 
 <div class="grid-blue-split"></div>
 </td>
 <td>
 <div class="page-input">第
      <input class="input-page-text" type="text" name="pageNo" size="2" value="<bean:write name='currentPage'/>"> 页, <a  href="#"  onclick="javascript:prCheck();">跳转</a>,共<bean:write name='totalPages'/>页
    </div>

 <div class="grid-blue-split"></div>
 </td>
 <td>
  <logic:present name="nextPage">
  <a href="javascript:nextPage();">下一页  </div></a>
  </logic:present>
 <logic:notPresent name="nextPage">
  <div class="page-next-disabled"></div>
 </logic:notPresent>
 </td>
 <td >
 <logic:present name="lastPage">
  &nbsp;&nbsp;<a href="javascript:lastPage();">最后一页</div></a>
 </logic:present>
 <logic:notPresent name="lastPage">
  <div class="page-last-disabled"></div>
 </logic:notPresent>
    </td>
    <td>
 <div class="grid-blue-split"></div>
    <div class="page-refresh"></div>
    <div class="grid-blue-split"></div>
     <div>共<bean:write name="totalRecords"/>条记录</div>
 </td>
  </tr>
</table>
</logic:present>

5  业务jsp页面,

在业务jsp页面  在适当的位置插入<jsp:include page="../common/page.jsp" />  即可  ,../common/page.jsp  是你分页jsp的位置


本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/applezhengxd/archive/2009/09/02/4509779.aspx

 

分享到:
评论

相关推荐

    sybase数据库存储过程调用外部JAVA

    总之,Sybase数据库支持通过存储过程调用外部Java程序,提供了一种灵活的方式来实现数据库中的复杂计算和任务调度。正确配置数据库环境,导入Java类,创建适当的SQL包装器,是实现这一功能的关键步骤。理解JNI调用...

    毕业设计-源码Java调用Oracle存储过程实现分页功能

    在这个毕业设计项目中,我们主要探讨的是如何使用Java语言调用Oracle数据库的存储过程来实现分页功能,这在Web应用程序中非常常见,尤其是在处理大数据量时,为了提高用户体验,分页是一种有效的数据展示方式。...

    Java实现调用MySQL存储过程详解

    3. **调用存储过程**:使用`CallableStatement`对象来执行存储过程。对于带参数的存储过程,需要设置参数并执行`executeProcedure()`。 ```java String procedureName = "{call findAllBook(?) }"; // 例如,调用...

    java调用oracle存储过程返回结果集,Record,cursor参照.pdf

    本文介绍了Java调用Oracle存储过程返回结果集Record和Cursor的相关知识点,包括创建Type、PACKAGE和PROCEDURE,Java代码中调用存储过程,并获取结果集。这些知识点对深入了解Oracle存储过程和Java调用Oracle存储过程...

    java调用存储过程(含out参数)

    总之,调用存储过程是Java开发中处理数据库操作的重要环节。理解如何设置`IN`和`OUT`参数,并正确地执行和获取结果,将有助于提高代码的效率和可维护性。希望这个详细讲解对你有所帮助,如果你在实践中遇到任何问题...

    java调用oracle存储过程或者函数

    调用Oracle函数的过程与调用存储过程类似,但创建CallableStatement时的SQL语句略有不同。由于函数会返回一个值,所以格式通常是`{? = call function_name(?, ?, ...)}`。在执行后,通过`CallableStatement....

    Java调用oracle存储过程通过游标返回临时表

    在Oracle中,调用存储过程通常以`BEGIN`和`END`包围,使用`CALL`关键字。例如: ```java String callProc = "{call package_name.procedure_name(?, ?)}"; PreparedStatement pstmt = connection.prepareCall...

    java 调用db2存储过程

    二、 Java 调用存储过程 要在 Java 中调用存储过程,需要使用 JDBC 连接 DB2 数据库。首先,需要加载 DB2 驱动程序: ```java String JDBCDriver = "com.ibm.db2.jcc.DB2Driver"; ``` 然后,使用 DriverManager ...

    Java调用Mysql存储过程

    以下是调用存储过程的基本步骤: 1. **加载驱动**:首先需要在Java程序中加载MySQL的JDBC驱动,这通常通过`Class.forName()`方法实现,例如: ```java Class.forName("com.mysql.cj.jdbc.Driver"); ``` 2. **...

    JAVA调用ORACLE存储过程

    使用 `prepareCall` 方法准备调用存储过程 `selemp_sal`,并通过 `registerOutParameter` 注册输出参数类型为 `NUMERIC`。执行后,通过 `getInt` 方法获取输出参数的值。 ### 总结 本文详细介绍了如何在 Java 中...

    asp.net 用存储过程实现分页(附代码)

    在ASP.NET中,我们可以使用`SqlCommand`对象来调用存储过程。首先,建立数据库连接,然后创建`SqlCommand`对象,设置其命令类型为`StoredProcedure`,并指定存储过程名称。接下来,添加参数,包括输入和输出参数。...

    java调用存储过程实例

    在IT领域,特别是数据库操作与Java编程的...Java调用存储过程是实现高效数据库交互的关键技术。通过正确设置参数、执行存储过程并管理资源,可以在Java应用中充分利用存储过程的功能,从而提高应用的性能和可维护性。

    java调用oracle存储过程.wps

    java调用oracle存储过程.wps java调用oracle存储过程.wps java调用oracle存储过程.wps

    java调用Oracle存储过程的代码

    3. **调用存储过程**:通过`CallableStatement`的`execute`或`executeQuery`方法执行存储过程。 4. **处理输出参数和结果集**:如果存储过程有输出参数或返回结果集,使用`getXXX`方法获取它们。 假设我们有一个名...

    java中调用sql存储过程详细例子

    下面将详细介绍如何使用Java调用存储过程。 1. **创建CallableStatement对象** 首先,我们需要创建一个`CallableStatement`实例,这可以通过`Connection`对象的`prepareCall`方法完成。存储过程的调用格式通常以`...

    java调用sqlserver存储过程.pdf

    4. Java 调用存储过程 在 Java 应用程序中,可以使用 JDBC(Java Database Connectivity)来调用 SQL Server 数据库中的存储过程。在本例中,使用了 `java.sql` 包中的 `CallableStatement` 对象来调用 `InsertUser...

    MySql 分页存储过程以及代码调用

    这里,我们使用了pymysql的cursor.callproc方法来调用存储过程,并获取返回的结果。`cursor.lastrowid`用来获取存储过程返回的最后一个值,即总行数。 总结来说,MySQL的分页存储过程提供了一种高效、可复用的方式...

    JAVA调用ORACLE存储过程通用类

    - **queryProcedure**方法:该方法是核心处理方法,用于调用存储过程,并获取结果集。 - 参数列表: - `List list`:包含要传递给存储过程的参数值列表。 - `String strStoredProcedureName`:存储过程的名称。 ...

    java调用oracle存储过程

    Java作为主流的企业级开发语言之一,在与Oracle数据库交互时调用存储过程是一种常见的需求。 #### 二、背景知识 1. **Java Database Connectivity (JDBC):** JDBC 是 Java 应用程序与关系型数据库通信的标准接口。...

    java调用wps,实现word转pdf,word转图片等

    本话题主要关注如何利用Java调用WPS(金山办公软件)来实现Word到PDF的转换以及Word到图片的转换。这些功能对于处理大量文档和报告的企业尤其有用,可以自动化工作流程,减少手动操作。 首先,让我们了解WPS。WPS ...

Global site tag (gtag.js) - Google Analytics