废话不多说 进入正题: Oracle返回结果集然后用JDBC调用。
方法有两种,以Oracle scott用户下的DEPT表为例。
1. 程序包
sql 代码
- create
or
replace
package Test_cursor
as
- type my_cursor
is
ref
cursor
;
-
procedure
my_procedure(para
out
my_cursor);
- end
Test_cursor;
-
- create
or
replace
package body Test_cursor
as
-
procedure
my_procedure(para
out
my_cursor)
is
-
begin
-
open
para
for
-
select
d.deptno, d.dname
from
dept d;
-
end
my_procedure;
- end
Test_cursor;
-
- 2. 程序包+存储过程
-
- create
or
replace
package types
as
- type cursorType
is
ref
cursor
;
- end
;
-
- create
or
replace
procedure
getemps(p_cursor
out
types.cursorType)
as
- begin
-
open
p_cursor
for
-
select
d.deptno, d.dname
from
dept d;
- end
;
以此类推,用程序包+函数同样可以。
下面是测试类:
java 代码
- package
com.chnic.procedure;
-
- import
java.sql.CallableStatement;
- import
java.sql.Connection;
- import
java.sql.DriverManager;
- import
java.sql.ResultSet;
- import
java.sql.SQLException;
-
- import
oracle.jdbc.driver.OracleTypes;
-
- public
class
TestProcedure {
-
- private
String path =
"jdbc:oracle:thin:@localhost:1521:Oracle"
;
- private
String user =
"Scott"
;
- private
String password =
"tiger"
;
- private
Connection conn;
- public
TestProcedure(){
-
try
{
- Class.forName(
"oracle.jdbc.driver.OracleDriver"
);
- conn = DriverManager.getConnection(path, user, password);
- }
catch
(ClassNotFoundException e) {
- e.printStackTrace();
- }
catch
(SQLException e) {
- e.printStackTrace();
- }
- }
-
- public
void
readFromProcedure(){
-
try
{
-
- CallableStatement call = conn.prepareCall(
"call TEST_CURSOR.MY_PROCEDURE(?)"
);
- call.registerOutParameter(
1
, OracleTypes.CURSOR);
- call.execute();
- ResultSet rs = (ResultSet)call.getObject(
1
);
-
while
(rs.next()){
- System.out.println(rs.getString(
1
) +
" --- "
+ rs.getString(
2
));
- }
-
this
.releaseConnection(conn);
- }
catch
(SQLException e) {
- e.printStackTrace();
- }
- }
-
- public
void
releaseConnection(Connection conn){
-
try
{
- conn.close();
- }
catch
(SQLException e) {
- e.printStackTrace();
- }
- }
- public
static
void
main(String[] args){
- TestProcedure tp =
new
TestProcedure();
- tp.readFromProcedure();
- }
- }
分享到:
相关推荐
当使用 JDBC 从远程 Oracle 数据库提取数据时,如果远程数据库使用的是 `US7ASCII` 字符集,而本地应用期望的数据字符集为 `ZHS16GBK`,则在读取过程中会因字符集转换错误而导致乱码。这是因为 Java 在处理字符串时...
总之,Java通过Oracle JDBC驱动可以高效、安全地访问Oracle数据库,实现数据的读取、插入、更新和删除等一系列操作。这个驱动包为Java开发者提供了与Oracle数据库无缝集成的工具,大大简化了开发流程。
Flink JDBC Connector 支持Oracle , Flink 1.13.6 支持Oracle 11.2.0.4
- **性能优化**:理解并使用JDBC的批处理、预编译、结果集缓存等特性,可以显著提升应用程序的性能。 总之,Oracle Database 12c Release 1 JDBC Driver提供了全面的Java与Oracle数据库的互操作能力,通过研究"demo...
如果存储过程有结果集返回,可以使用`ResultSet`来获取。 总的来说,使用JDBC操作Oracle的存储过程返回值涉及了JDBC的基本操作,包括加载驱动、建立连接、创建CallableStatement、设置参数、执行存储过程、获取...
Java 中 XML 文件的处理及 Oracle 中 XMLType 的插入和读取 Java 中 XML 文件的处理是指在 Java 应用程序中处理和操作 XML 文件的过程。在 Oracle 数据库中,XMLType 是一种特殊的数据类型,用于存储和处理 XML ...
1. **JDBC Driver**: 这个JDBC驱动程序实现了Oracle数据库的特定接口,使得Java应用程序能够通过JDBC API与Oracle数据库建立连接,执行SQL语句,以及处理结果集。 2. **Geotools的JDBC数据存储(DataStore)**: Geo...
在Java编程中,调用Oracle数据库的存储过程并获取返回的结果集是一项常见的任务。这个例子展示了如何处理返回Record类型和Cursor类型的存储过程。Record类型在Oracle中是一种自定义的数据结构,可以用来模拟类似...
处理结果集`ResultSet`,我们可以遍历每一行数据,读取列值: ```java while (rs.next()) { System.out.println(rs.getString("column_name")); } ``` 最后,别忘了关闭打开的资源,防止内存泄漏: ```java rs....
### 使用JDBC连接Oracle数据库 #### 一、简介与背景 Java Database Connectivity (JDBC) 是 Java 开发语言中的一项关键技术,它允许开发者通过标准 API 与多种类型的数据库进行交互。JDBC 提供了一种机制,使 Java...
3. **结果集处理**:探讨如何有效地读取和处理查询返回的结果集,包括结果集的遍历、元数据的获取以及不同类型数据的处理技巧。 4. **事务控制**:详解如何使用JDBC控制事务,包括开启事务、提交和回滚操作,确保...
6. 性能优化:Oracle 10g JDBC驱动相比9i有性能上的提升,包括更快的查询速度、更高效的内存管理以及对大结果集处理的优化。 在使用这些驱动时,开发者需要注意以下几点: - 确保JDK版本与驱动兼容,避免出现运行时...
4. **处理结果集**: 遍历`ResultSet`,读取查询结果。 ```java while (rs.next()) { System.out.println(rs.getString("column_name")); } ``` 5. **关闭资源**: 完成操作后,记得关闭连接和其他资源,以释放...
5. **处理结果集**:遍历ResultSet,读取每一行数据,进行业务逻辑处理。 6. **关闭资源**:在完成操作后,记得关闭ResultSet、Statement以及Connection,以释放系统资源。 在实现增删改功能时: - **插入数据**...
5. **处理结果集**:对于查询操作,会返回ResultSet对象,可以遍历该结果集获取查询结果。 6. **关闭资源**:使用完数据库连接、Statement或PreparedStatement对象后,必须关闭它们,释放系统资源,防止内存泄漏。 ...
在处理结果集时,ResultSet对象扮演了关键角色。它是一个游标,可以从数据库检索一行数据,并允许向前或向后移动,读取或修改记录。 事务管理是JDBC中的另一个重要概念。通过Connection对象的`setAutoCommit()`和`...
这种配置下,MySQL会使用游标的方式返回结果集,即只在客户端缓存部分数据,并且可以按需获取更多的行,这样可以有效地减少内存占用。 **2. SQL Server** 对于SQL Server,同样推荐使用游标模式来获取结果集。可以...
在Oracle数据库存储超大文件时、以流的方式分段读取和保存,避免内存溢出。本工具类提供两个方法: 1、读取文件保存到Oracle数据库Blob字段(支持超大文件) 2、从数据库中读出大字段到文件中(分块读取)
可以使用Oracle的游标(Cursor)来逐行读取,减少内存占用。例如,使用ResultSet的scroll方法: ```java Statement stmt = conn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY);...
- **结果集处理**:对于大型查询结果,可以采用分批读取的方式,避免一次性加载过多的数据。 #### 结论 本文档提供了一个使用 JDBC 连接 Oracle 11g 数据库的基本框架,并进行了初步的封装。虽然在实际应用中还...