java表的储存和调用,简要记录存储过程语法与Java程序的调用方式

一 存储过程

首先,我们建立一个简单的表进行存储过程的测试

createtablexuesheng(idinteger, xing_mingvarchar2(25), yu_wennumber, shu_xuenumber);insertintoxueshengvalues(1,'zhangsan',80,90)insertintoxueshengvalues(2,'lisi',85,87)

1)无返回值的存储过程

createorreplaceprocedurexs_proc_noisbegininsertintoxueshengvalues(3,'wangwu',90,90);commit;endxs_proc_no;

2)有单个数据值返回的存储过程

createorreplaceprocedurexs_proc(temp_nameinvarchar2,

temp_num  outnumber)isnum_1number;

num_2number;beginselectyu_wen, shu_xueintonum_1, num_2fromxueshengwherexing_ming=temp_name;--dbms_output.put_line(num_1 + num_2);temp_num :=num_1+num_2;end;

其中,以上两种与sql server基本类似,而对于返回数据集时,上述方法则不能满足我们的要求。在Oracle中,一般使用ref cursor来返回数据集。示例代码如下:

3)有返回值的存储过程(列表返回)

首先,建立我们自己的包。并定义包中的一个自定义ref cursor

createorreplacepackage mypackageastype my_cursorisrefcursor;endmypackage;

在定义了ref cursor后,可以书写我们的程序代码

createorreplaceprocedurexs_proc_list(shuxueinnumber,

p_cursor out mypackage.my_cursor)isbeginopenp_cursorforselect*fromxueshengwhereshu_xue>shuxue;endxs_proc_list;

二、程序调用

在本节中,我们使用java语言调用存储过程。其中,关键是使用CallableStatement这个对象,代码如下:

对于列表返回值的存储过程,在上述代码中做简单修改。如下

CallableStatement proc=null;

proc=myConnection.prepareCall("{call getdcsj(?,?,?,?,?)}");

proc.setString(1, strDate);

proc.setString(2, jzbh);

proc.registerOutParameter(3, Types.NUMERIC);

proc.registerOutParameter(4, OracleTypes.CURSOR);

proc.registerOutParameter(5, OracleTypes.CURSOR);

proc.execute();

ResultSet rs=null;inttotal_number=proc.getInt(3);

rs=(ResultSet)proc.getObject(4);

上述存储过程修改完毕。另外,一个复杂的工程项目中的例子:查询一段数据中间隔不超过十分钟且连续超过100条的数据。即上述代码所调用的getdcsj存储过程

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值