Java调用Oracle存储过程详解及分页实现
需积分: 10 61 浏览量
更新于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 语法。了解这些技巧,将有助于你在实际开发中更有效地操作数据库。
点击了解资源详情
点击了解资源详情
点击了解资源详情
2020-09-04 上传
2014-05-21 上传
2011-08-01 上传
2019-07-26 上传
2011-10-08 上传
2012-05-04 上传
IT-Sunlight
- 粉丝: 7
- 资源: 4
最新资源
- Hibernate In Action
- 第2章 递归与分治策略.pdf
- java基础入门教程
- pku ACM在线评判 ACM题目分类.doc
- jsp connect mysql
- ARTeam站上的10篇OD入门教程
- JXTA java p2p Programming(英文版)
- S3C2410开发流程
- 学习Excel.VBA与XML、ASP协同应用.pdf
- VC++环境下WinSock编程及实例分析
- 服务器选购指南白皮书
- 高质量C++/C编程指南
- 灰狐驱动学习笔记系列文章.pdf
- 3D Game Engine Architecture
- 23种java设计模式
- PowerDesigner UML 建模简介(第二部分).doc