----oracle 代码
----说明部分
CREATE OR REPLACE PACKAGE CURSPKG AS
TYPE refCursorType IS REF CURSOR;
procedure sp_Page(p_PageSize int, --每页记录数
p_PageNo int, --当前页码,从 1 开始
p_SqlSelect varchar2, --查询语句,含排序部分
p_SqlCount varchar2, --获取记录总数的查询语句
p_OutRecordCount out int, --返回总记录数
p_OutCursor out refCursorType);
END;
---包体
create or replace package body CURSPKG is
procedure sp_Page(p_PageSize int, --每页记录数
p_PageNo int, --当前页码,从 1 开始
p_SqlSelect varchar2, --查询语句,含排序部分
p_SqlCount varchar2, --获取记录总数的查询语句
p_OutRecordCount out int, --返回总记录数
p_OutCursor out refCursorType) is
v_sql varchar2(3000);
v_count int;
v_heiRownum int;
v_lowRownum int;
begin
----取记录总数
execute immediate p_SqlCount
into v_count;
p_OutRecordCount := v_count;
----执行分页查询
v_heiRownum := p_PageNo * p_PageSize;
v_lowRownum := v_heiRownum - p_PageSize + 1;
v_sql := 'SELECT * FROM (SELECT A.*, rownum rn
FROM (' || p_SqlSelect || ') A
WHERE rownum <= ' || to_char(v_heiRownum) || ') B
WHERE rn >= ' || to_char(v_lowRownum);
--注意对rownum别名的使用,第一次直接用rownum,第二次一定要用别名rn
OPEN p_OutCursor FOR v_sql;
end sp_Page;
end;
/*/////java代码 */
public Object[] findStuffByQuary(String name,String qualitiy,String type,String level, int Npage, int PageSize) {
String sql_data = "";
String sql_count = "";
String call = "{call CURSPKG.SP_PAGE(?,?,?,?,?,?)}";
Connection conn = connectionMgr.getCon();
CallableStatement ps;
Object[] obj = new Object[2];
List<VTmarketTgoods> list = new ArrayList<VTmarketTgoods>();
int countsize = 0;
try {
ps = conn.prepareCall(call);
ps.setInt(1, PageSize); // 每页数量
ps.setInt(2, Npage); // 页码
// 查询商店能购买的物品
// 取数据的sql
ps.setString(3, sql_data);
// 取数据个数的sql
ps.setString(4, sql_count);
// 输出数据行数
ps.registerOutParameter(5,OracleTypes.INTEGER);
// 输出游标记录集
ps.registerOutParameter(6, OracleTypes.CURSOR);
ps.execute();
countsize = ((OracleCallableStatement) ps).getInt(5);
ResultSet rs = ((OracleCallableStatement) ps).getCursor(6);
while (rs.next()) {
VTmarketTgoods tsg = new VTmarketTgoods();
filldata(tsg, rs);
list.add(tsg);
}
} catch (SQLException e) {
e.printStackTrace();
} finally {
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
obj[0] = list; obj[1] = countsize;
return obj;
}
分享到:
相关推荐
为了实现分页查询,我们可以创建一个专门的Page类,包含当前页数、每页记录数、总记录数等属性,以及获取和设置这些属性的方法。 接下来,我们探讨Oracle数据库中的分页查询。Oracle提供了ROWNUM伪列,可以用来限制...
对于初学者,这个项目提供了一个很好的实践机会,你可以通过它了解Java Web与Oracle数据库交互的基本流程,以及分页功能的实现细节。同时,你还可以扩展这个功能,比如添加排序、搜索等高级特性,进一步提升自己的...
本文将对 MySQL、SQL Server、Oracle 分页的实现进行详细的介绍,并提供一个 Java 分页统一接口的实现例子。 一、MySQL 分页 MySQL 分页使用 limit 语句来实现,limit 语句可以指定数据的起始行和行数。例如,以下...
以下是一个简单的Java分页示例: ```java public List<YourEntity> fetchPagedData(int pageNum, int pageSize) { String sql = "SELECT * FROM (SELECT a.*, ROWNUM rn FROM (SELECT * FROM your_table ORDER BY ...
这里,`ROW_NUMBER() OVER (ORDER BY some_column)`会根据指定的排序列生成一个行号,然后通过`BETWEEN`来选择特定范围的行。 然而,即使使用ROW_NUMBER(),在大表中执行这样的查询仍然可能较慢,因为Oracle必须为...
5. **存储过程分页**:在Oracle中,可以创建一个存储过程来处理分页逻辑,这样可以减少与数据库的交互次数,提高效率。存储过程接受页码和每页大小作为参数,返回分页后的结果集。 在Java中,我们可以使用JDBC...
在Java中,我们可以创建一个分页类,包含当前页码、每页记录数等属性,并提供计算起始位置和结束位置的方法。例如: ```java public class Pagination { private int currentPage; private int pageSize; ...
在Oracle数据库中,我们可以创建一个包含分页逻辑的存储过程,接收两个参数:页数`P`和每页大小`N`,并返回所需的数据。 以下是一个简单的Oracle存储过程示例: ```sql CREATE OR REPLACE PACKAGE page_pkg AS ...
以下是一个简单的示例: ```java Class.forName("oracle.jdbc.driver.OracleDriver"); Connection conn = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:ORCL", "username", "password"); // ...
根据提供的信息,我们可以详细解析如何在Oracle数据库中创建一个包,并在该包内定义一个存储过程来实现分页功能。这种做法通常用于处理大量数据时,以提高查询效率和用户体验。 ### Oracle包与存储过程 #### 一、...
Oracle数据库级分页是数据库管理中的一个重要概念,特别是在处理大量数据时,为了提高查询效率和用户体验,分页技术显得尤为关键。在Java开发中,我们通常利用JDBC(Java Database Connectivity)来实现这一功能。本...
关于oracle 的分页、翻页的java源代码,结合JDBC连接数据库实现,比较基础的JDBC结合swing图形框架实现,适合Java初学者使用
本文为读者提供了一个完整的解决方案,指导读者如何使用Java语言与Oracle数据库实现分页功能。 知识点: * Oracle数据库的存储过程 * PL/SQL语言 * Java语言 * 分页功能 * 数据库查询优化 相关概念: * 数据库...
这是我自己改的分页代码 呵呵 写了将近一个星期 只有一个控制类和一个jsp页 方便阅读和修改 只要修改test.java里面的数据库连接和表名就可以用了 希望大家工作和学习顺利 里面的class12.jar这个包是因为我的数据库...
2. **创建DAO层**:在数据访问对象(DAO)层,我们需要定义一个方法来执行分页查询。使用Hibernate的Criteria或HQL查询语言,配合PageHelper或者自己实现的分页逻辑,可以轻松实现分页查询。 3. **定义Service层**...
再者,`ShowSQL.java`可能是一个辅助类,用于生成分页SQL。在Oracle数据库中,由于不支持直接的`LIMIT`子句,通常会通过`ROWNUM`和子查询来实现分页。`ShowSQL.java`可能会包含生成这类复杂SQL的静态方法,接收页码...
本资源包"java分页大全"提供了多种Java分页实现,旨在帮助开发者更高效地进行数据查询和展示。 首先,我们来探讨一下Java分页的基本原理。分页通常涉及两个关键部分:一是计算当前页的数据范围,二是根据这个范围从...
Oracle提供了一种名为ROWNUM的伪列,它会为每一行返回一个唯一的数字,从1开始递增。通过ROWNUM,我们可以实现简单的分页。例如,如果我们想获取第1页(通常包含前10条记录),可以编写如下的SQL查询: ```sql ...
【SSH+Oracle 整合详解】 SSH(Struts2、Spring、Hibernate)是Java开发中常用的三大开源框架,它们各自负责Web应用的不同层面:...理解并掌握这些知识点,将有助于你理解和使用这个整合的SSH+Oracle分页解决方案。
1. **Struts框架**:Struts是一个基于MVC(Model-View-Controller)设计模式的Java Web框架。它负责处理HTTP请求,将请求映射到相应的Action,然后Action通过业务逻辑层与持久层交互,最后返回结果视图。在分页场景...