Java 开发中之八:oracle中的子程序之在JAVA中如何调用程序包
2012-12-11 22:14
651 查看
--程序包:解决集合数据的获取
--引用类型游标+函数/存储过程:
--包的创建(包的声明+实现)
create or replace package mypack
as
--类似于编写接口
--创建引用型的游标(制作返回值类型,只在这个包里有效)
type myttt is ref cursor return emp%rowtype ;--如果有返回值则是强类型
--首先写函数,其实考虑存储过程
function f2 (dno number) return myttt;--返回一个游标,这样返回的就不是一个单值了。
end mypack ;
--程序包:解决集合数据的获取
create or replace package body mypack --包体相关于接口的实现
as
function f2 (dno number) return myttt
is --因为上面有as了,所以这里写is
ttt myttt;
begin
open ttt for select * from emp where emp.deptno=dno; --只有给游标时才没有Into,其它都给写上into
return ttt;
end;
end;
用pl/sql块接这个游标
declare
eee mypack.myttt;
empr emp%rowtype;
begin
eee:=scott.mypack.f2(30);
loop
fetch eee into empr;
exit when eee%notfound;
dbms_output.put_line(empr.ename);
end loop;
end;
JAVA中调这个包体
Connection connection=null;
CallableStatement statement=null;
OracleConnection conn=null;
try
{
Class.forName("oracle.jdbc.driver.OracleDriver");
//DriverManager.registerDriver("oracle.jdbc.driver.OracleDriver");
String url="jdbc:oracle:thin:@127.0.0.1:1521:ORCL";
String user="scott";
String password="tiger";
//下面是標準的的連接對象
//connection= DriverManager.getConnection(url, user, password);
//下面是在標準的連接不上時可以考慮的
conn=(OracleConnection) DriverManager.getConnection(url, user, password);
String strsql="{?=call mypack.f2(?)}";
statement= conn.prepareCall(strsql);
statement.setInt(2, 20);
statement.registerOutParameter(1,OracleTypes.CURSOR);
statement.execute();
ResultSet rSet= (ResultSet) statement.getObject(1);
while(rSet.next()){
System.out.println(rSet.getInt(1)+","+rSet.getString(2));
}
}
catch (ClassNotFoundException e)
{
e.printStackTrace();
}
finally
{
if(conn!=null)
{
conn.close();
}
if(connection!=null){
connection.close();
}
if(statement!=null){
statement.close();
}
}
--引用类型游标+函数/存储过程:
--包的创建(包的声明+实现)
create or replace package mypack
as
--类似于编写接口
--创建引用型的游标(制作返回值类型,只在这个包里有效)
type myttt is ref cursor return emp%rowtype ;--如果有返回值则是强类型
--首先写函数,其实考虑存储过程
function f2 (dno number) return myttt;--返回一个游标,这样返回的就不是一个单值了。
end mypack ;
--程序包:解决集合数据的获取
create or replace package body mypack --包体相关于接口的实现
as
function f2 (dno number) return myttt
is --因为上面有as了,所以这里写is
ttt myttt;
begin
open ttt for select * from emp where emp.deptno=dno; --只有给游标时才没有Into,其它都给写上into
return ttt;
end;
end;
用pl/sql块接这个游标
declare
eee mypack.myttt;
empr emp%rowtype;
begin
eee:=scott.mypack.f2(30);
loop
fetch eee into empr;
exit when eee%notfound;
dbms_output.put_line(empr.ename);
end loop;
end;
JAVA中调这个包体
Connection connection=null;
CallableStatement statement=null;
OracleConnection conn=null;
try
{
Class.forName("oracle.jdbc.driver.OracleDriver");
//DriverManager.registerDriver("oracle.jdbc.driver.OracleDriver");
String url="jdbc:oracle:thin:@127.0.0.1:1521:ORCL";
String user="scott";
String password="tiger";
//下面是標準的的連接對象
//connection= DriverManager.getConnection(url, user, password);
//下面是在標準的連接不上時可以考慮的
conn=(OracleConnection) DriverManager.getConnection(url, user, password);
String strsql="{?=call mypack.f2(?)}";
statement= conn.prepareCall(strsql);
statement.setInt(2, 20);
statement.registerOutParameter(1,OracleTypes.CURSOR);
statement.execute();
ResultSet rSet= (ResultSet) statement.getObject(1);
while(rSet.next()){
System.out.println(rSet.getInt(1)+","+rSet.getString(2));
}
}
catch (ClassNotFoundException e)
{
e.printStackTrace();
}
finally
{
if(conn!=null)
{
conn.close();
}
if(connection!=null){
connection.close();
}
if(statement!=null){
statement.close();
}
}
相关文章推荐
- Java 开发中之七:oracle中的子程序之在JAVA中如何调用存储过程,函数。
- Java如何实现调用oracle带有返回值的存储过程
- oracle如何使用java source调用外部程序
- JAVA如何调用.NET开发的WebService
- Loadrunner11如何成功调用eclipse开发的Java代码
- Oracle常用命令14(.net / java代码调用(sql代码、程序包过程))
- java 如何调用window开发的dll文件
- 如何通过java程序调用oracle中的存储过程
- 关于 "java 如何调用Oracle存储过程中的动态refcursor结果集" 问题
- oracle如何使用java source调用外部程序
- java-oracle 调用程序包
- JAVA如何调用.NET开发的WebService
- 如何使用网页开发自己的app,在网页中的按钮与自己的java代码绑定来实现打电话即javascript代码调用java代码,和java代码来调用javascript代码
- android中C程序如何调用JAVA方法
- 如何使用C#调用Java
- 使用GCC开发动态库供java调用
- 如何用Java回调和线程实现异步调用
- 【安博培训技术】Oracle7 子程序和程序包20130912
- 如何调用自行设计的系统调用, --核心开发入门(3)
- 0072 JAVA JNI 如何调用C或者C++生成的dll【基础】