oracle java调用存储过程_oracle 使用java调用存储过程和存储函数

(本文章内容仅在windows10下经测试能够运行,不能保证其他环境下的可靠性)

目录

调用存储过程

原理:使用preparedStatement接口的子接口CallableStatement接口获取执行sql语句的对象,依据jdk文档给定的sql语句格式调用存储过程,

具体格式如下:

{call [(,, ...)]}

预编译的存储过程代码如下:

create or replace procedure p_yearsal(eno emp.empno%type,yearsal out number)

as

sal number(10);

comm number(10);

begin

select sal,nvl(comm,0) into sal,comm from emp where empno =eno;

yearsal := sal * 12 +comm;

end;

调用该存储过程的java代码所需的sql语句如下:

String sql = "{call p_yearsal(?,?)}";

然后需要对sql语句的存储过程参数的占位符赋值,

输入型参数使用setObject(int parameterIndex,Object o)方法赋值;输出型参数使用registerOutParamter(int parametrIndex,int type)方法注册,第二参数是OracleTypes对象所定义的常量。

使用getObject(int parameterInex)方法获取输出型参数的值

示例java代码如下:

/*** 使用java调用存储过程,

* {call [(,, ...)]} 调用存储过程的格式*/@Testpublic void testProcedure() throwsSQLException {//获得连接

connection = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:orcl", "o_user1", "p123456");//准备sql语句

String sql = "{call p_yearsal(?,?)}";//获取执行sql语句的对象

CallableStatement pstm =connection.prepareCall(sql);//设置输入型参数使用setObject(parameterIndex,o)方法,也可具体更加类型调用其他set方法

pstm.setInt(1, 7788);//设置输出型参数使用registerOutParameter(parameterIndex,int)方法

pstm.registerOutParameter(2, OracleTypes.NUMBER);//执行sql语句

pstm.execute();

System.out.println(pstm.getObject(2));//释放资源

pstm.close();

}

上面代码加载驱动和释放资源部分代码已使用@Before和@After注解所使用的方法完成。

调用存储函数

原理:使用preparedStatement接口的子接口CallableStatement接口获取执行sql语句的对象,依据jdk文档给定的sql语句格式调用存储函数,

具体格式如下:

{?= call [(,, ...)]}

预编译的存储函数代码如下:

create or replace function f_yearsal(eno emp.empno%type) returnnumber

is

s number(10);

begin

select sal* 12 + nvl(comm,0) into s from emp where empno =eno;returns;

end;

调用该存储函数的java代码所需的sql语句如下:

String sql = "{? = call f_yearsal(?)}";

然后需要对sql语句的存储函数参数和返回值的占位符赋值,

输入型参数使用setObject(int parameterIndex,Object o)方法赋值;输出型参数和返回值使用registerOutParamter(int parametrIndex,int type)方法注册,第二参数是OracleTypes对象所定义的常量。

使用getObject(int parameterInex)方法获取输出型参数和存储函数返回值的值

示例java代码如下:

/*** java调用存储函数

* {?= call [(,, ...)]} 调用存储函数的格式*/@Testpublic void testFunction() throwsSQLException {//获得连接

connection = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:orcl", "o_user1", "p123456");//准备sql语句

String sql = "{? = call f_yearsal(?)}";//获取执行sql语句的对象

CallableStatement pstm =connection.prepareCall(sql);//设置输入型参数使用setObject(parameterIndex,o)方法,也可具体更加类型调用其他set方法

pstm.setInt(2, 7788);//设置输出型参数使用registerOutParameter(parameterIndex,int)方法

pstm.registerOutParameter(1, OracleTypes.NUMBER);//执行sql语句

pstm.execute();

System.out.println(pstm.getObject(1));//释放资源

pstm.close();

}

上面代码加载驱动和释放资源部分代码已使用@Before和@After注解所使用的方法完成。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值