Java调用Oracle存储过程详解及分页实现

需积分: 10 6 下载量 98 浏览量 更新于2024-07-25 收藏 113KB DOC 举报
"Java 调用 Oracle 存储过程及分页操作示例" 在 Java 开发中,有时需要与数据库进行深度交互,比如调用数据库中的存储过程。Oracle 是一个广泛使用的数据库系统,提供了丰富的功能,包括存储过程。本示例将介绍如何在 Java 中调用 Oracle 的无返回值存储过程以及实现分页查询。 首先,我们来看一个无返回值的 Oracle 存储过程的创建。以下是一个简单的示例: ```sql CREATE OR REPLACE PROCEDURE TESTA (PARA1 IN VARCHAR2, PARA2 IN VARCHAR2) AS BEGIN INSERT INTO HYQ.B_ID (I_ID, I_NAME) VALUES (PARA1, PARA2); END TESTA; ``` 这个存储过程接受两个参数 `PARA1` 和 `PARA2`,并把它们插入到 `HYQ.B_ID` 表中。 接下来,我们将演示如何在 Java 中调用这个存储过程。首先确保已经正确配置了 Oracle JDBC 驱动(如 ojdbc.jar),然后可以使用以下代码: ```java package com.hyq.src; import java.sql.*; public class TestProcedureOne { public TestProcedureOne() {} public static void main(String[] args) { String driver = "oracle.jdbc.driver.OracleDriver"; String strUrl = "jdbc:oracle:thin:@127.0.0.1:1521:hyq"; Statement stmt = null; ResultSet rs = null; Connection conn = null; CallableStatement cstmt = null; try { Class.forName(driver); conn = DriverManager.getConnection(strUrl, "hyq", "hyq"); CallableStatement proc = null; proc = conn.prepareCall("{call HYQ.TESTA(?,?)}"); proc.setString(1, "100"); proc.setString(2, "TestOne"); proc.execute(); } catch (SQLException ex2) { ex2.printStackTrace(); } catch (Exception ex2) { ex2.printStackTrace(); } finally { try { if (rs != null) { rs.close(); } if (stmt != null) { stmt.close(); } if (conn != null) { conn.close(); } } catch (SQLException e) { e.printStackTrace(); } } } } ``` 这段 Java 代码中,我们通过 `CallableStatement` 来调用 Oracle 存储过程。`prepareCall` 方法用于创建 `CallableStatement` 对象,然后设置参数,并执行存储过程。 至于分页查询,通常我们可以使用 SQL 的 `ROWNUM` 或 Oracle 特有的 `FETCH FIRST`、`OFFSET` 关键字来实现。例如,如果我们想要获取第 10 到 20 条记录,可以这样编写 SQL: ```sql SELECT * FROM ( SELECT T.*, ROWNUM RN FROM ( SELECT * FROM HYQ.B_ID ) T ) WHERE RN BETWEEN 10 AND 20 ``` 在 Java 中,可以通过 `PreparedStatement` 进行分页查询: ```java String sql = "SELECT * FROM (SELECT T.*, ROWNUM RN FROM (SELECT * FROM HYQ.B_ID) T) WHERE RN BETWEEN ? AND ?"; PreparedStatement pstmt = conn.prepareStatement(sql); pstmt.setInt(1, startRow); // startRow = 10 pstmt.setInt(2, endRow); // endRow = 20 ResultSet rs = pstmt.executeQuery(); ``` 这里的 `startRow` 和 `endRow` 分别表示分页的起始行号和结束行号。 总结来说,Java 调用 Oracle 存储过程需要创建 `CallableStatement` 对象,设置参数并执行。而实现分页查询则可以借助 `ROWNUM` 或特定的 SQL 语法。了解这些技巧,将有助于你在实际开发中更有效地操作数据库。