Oracle写一个部门表dept2(数据至少15条)的分页存储过程,并使用java代码调用输出在jsp页面上。
时间: 2024-02-11 22:04:23 浏览: 26
好的,以下是一个 Oracle 分页存储过程的示例:
```
CREATE OR REPLACE PROCEDURE pagination(
p_page IN NUMBER,
p_pageSize IN NUMBER,
p_total OUT NUMBER,
p_cursor OUT SYS_REFCURSOR
)
AS
l_startRow NUMBER;
l_endRow NUMBER;
BEGIN
l_startRow := (p_page - 1) * p_pageSize + 1;
l_endRow := l_startRow + p_pageSize - 1;
OPEN p_cursor FOR
SELECT * FROM (
SELECT ROW_NUMBER() OVER (ORDER BY deptno) AS rownum, d.*
FROM dept2 d
)
WHERE rownum BETWEEN l_startRow AND l_endRow;
SELECT CEIL(COUNT(*) / p_pageSize) INTO p_total FROM dept2;
END;
```
这个存储过程有三个输入参数:p_page 表示当前页码,p_pageSize 表示每页的记录数,p_total 是一个 OUT 参数,表示总页数。p_cursor 是一个 OUT 参数,表示查询结果的游标。
接下来,可以使用 Java 代码调用这个存储过程,并将结果输出在 JSP 页面上。以下是一个简单的示例:
```java
import java.sql.CallableStatement;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import oracle.jdbc.OracleTypes;
public class PaginationExample {
public static void main(String[] args) {
String jdbcUrl = "jdbc:oracle:thin:@localhost:1521:orcl";
String username = "your_username";
String password = "your_password";
int page = 2;
int pageSize = 5;
try (Connection conn = DriverManager.getConnection(jdbcUrl, username, password)) {
CallableStatement cs = conn.prepareCall("{call pagination(?, ?, ?, ?)}");
cs.setInt(1, page);
cs.setInt(2, pageSize);
cs.registerOutParameter(3, OracleTypes.INTEGER);
cs.registerOutParameter(4, OracleTypes.CURSOR);
cs.executeUpdate();
int total = cs.getInt(3);
ResultSet rs = (ResultSet) cs.getObject(4);
while (rs.next()) {
System.out.println(rs.getInt("deptno") + " " + rs.getString("dname") + " " + rs.getString("loc"));
}
rs.close();
cs.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
```
这个 Java 代码会调用 pagination 存储过程,并传递当前页码和每页的记录数。存储过程会返回总页数和查询结果的游标,Java 代码可以通过游标逐行读取查询结果,并输出在控制台上。在实际应用中,可以将查询结果传递给 JSP 页面,然后在页面上进行渲染。