废话不多说 进入正题: 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();
- }
- }
分享到:
相关推荐
Flink JDBC Connector 支持Oracle , Flink 1.13.6 支持Oracle 11.2.0.4
java中xml文件的处理及oracle中xmltype的插入和读取.pdf
在Oracle数据库存储超大文件时、以流的方式分段读取和保存,避免内存溢出。本工具类提供两个方法: 1、读取文件保存到Oracle数据库Blob字段(支持超大文件) 2、从数据库中读出大字段到文件中(分块读取)
JDBC连接Oracle 11g及Mysql5,涉及传参,反射,读取属性文件,预处理,(预处理)批处理,带参数的存储过程,事务处理,可滚动的结果集,可更新的结果集
oracle中使用jdbc读写clob字段,很多细节介绍,内容全面。
Struts用 JDBC Blob字段 保存和读取 Oracle 数据库 好用 试过 有详细注释
jdbc连接oracle,执行存储过程,带数据库存储过程,代码是详细的源码,读取配置文件,连接jdbc,执行存储过程。
java使用jdbc将数据库数据导出到csv文件
通过jdbc读取oracle数据库的clob类型的字段转换为string类型
排除代码逻辑没有问题,找到原因后特别想吐槽这个错误,纠结了半天。 一、错误原因 项目编码和数据库编码格式不一致,字段值含有汉字 都改为UTF-8格式 二、解决步骤 1.查看修改数据库编码格式 Navicat查看数据库编码...
主要是整合了jdbc处理clob类型的增删改查方法,有需要的同学可以看下
有的时候,我们需要一次查询很多的数据,或者是说每次查询的数据量都很大,都有可能早晨内存溢出的情况,所以我们今天分别针对三个数据库来探讨如何避免这一问题。
用hibernate和jdbc读存blob或clob
sql_json.sources.sql_source.driverclass= oracle.jdbc.driver.OracleDriver sql_json.sources.sql_source.filename = sqlSource.status sql_json.sources.sql_source.customquery = SELECT INTID,ID_NO FROM TEST....
String Driver="oracle.jdbc.driver.OracleDriver"; Connection conn = null; try { Class.forName(Driver); conn = DriverManager.getConnection(url, user, password); } catch (Exception e) { System.out....
execute:返回boolean类型的值,代表是否有结果集返回(如果执行select操作,是有ResultSet的,返回值为true) executeUpdate:返回int类型的值,代表的是,操作执行完成后,受影响的数据库的行计数(针对于insert,...
将数据库信息读取到xml中,部分代码 public class schemeXml { static Connection conn=null; static String sql; public static void main(String[] args) { try { //链接数据库,取得数据 //Class.forName(...
有近20年使用Oracle技术产品以及Oracle数据库管理员/Oracle数据库应用管理员的经验,是真正应用集群、性能调优以及数据库内部属性方面的专家。同时是一位演讲家及Oracle ACE。 JARED STILL 从1994年就开始使用...
在连接数据库的url地址有点不一样 代码如下:jdbc:oracle:thin:@(DESCRIPTION=(LOAD_BALANCE=on)(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=IP1)(PORT=1521))(ADDRESS=(PROTOCOL=TCP)(HOST=IP2)(PORT=1521)))...