收藏 分销(赏)

如何在Java程序中调用存储过程.doc

上传人:xrp****65 文档编号:8971824 上传时间:2025-03-09 格式:DOC 页数:4 大小:44.50KB 下载积分:10 金币
下载 相关 举报
如何在Java程序中调用存储过程.doc_第1页
第1页 / 共4页
如何在Java程序中调用存储过程.doc_第2页
第2页 / 共4页


点击查看更多>>
资源描述
如何在Java程序中调用存储过程(一)? (1)   使用scott/tiger用户在Oracle中创建2个表并插入几条数据。 Create table carl_test(A varchar2(200)); create table carl_test1(B varchar2(200)); --insert some data into carl_test1 table insert into carl_test1 values('carl1'); insert into carl_test1 values('carl2'); insert into carl_test1 values('carl3'); commit; (2)   使用scott/tiger用户在Oracle中创建一个测试存储过程,该存储过程有三个参数,第一个参数为输入参数,最后两个参数为输出参数。为简单起见,没有在该存储过程中加入异常捕获机制。 CREATE OR REPLACE PROCEDURE carl_sp_test ( v_monthly IN varchar2, last_inserted_rows_num OUT number, all_effected_rows_num OUT number) IS BEGIN /*删除carl_test表中所有记录*/ delete carl_test; /*将删除行数赋值给总影响行数*/ all_effected_rows_num := SQL%Rowcount; commit; /*将用户输入参数插入carl_test表中*/ insert into carl_test(a) values(v_monthly); all_effected_rows_num:= all_effected_rows_num + SQL%Rowcount; /*将表carl_test1中的所有记录插入到carl_test1中*/ insert into carl_test select * from carl_test1; /*获得影响记录数 */ last_inserted_rows_num:=SQL%Rowcount; all_effected_rows_num:= all_effected_rows_num + SQL%Rowcount; commit; END carl_sp_test; (3)   使用scott/tiger用户在SQL/Plus中测试上述存储过程 SQL> variable all_effected_rows_num number; SQL> variable last_inserted_rows_num number; SQL> exec carl_sp_test('first var',:last_inserted_rows_num,:all_effected_rows_num); PL/SQL procedure successfully completed last_inserted_rows_num --------- 3 all_effected_rows_num --------- 4 SQL> print last_inserted_rows_num; last_inserted_rows_num --------- 3 SQL> print all_effected_rows_num; all_effected_rows_num --------- 4 SQL> 上述结果表示测试成功 (4)   使用下面的Java类TestStoreProcedure.java测试存储过程。 package test; import java.sql.CallableStatement; import java.sql.Connection; import java.sql.DriverManager; import java.sql.SQLException; import oracle.jdbc.OracleTypes; /** * This class is used to test Oracle store procedure * @author CarlWu * */ public class TestStoreProcedure{ /** * 测试主方法 * @param args */ public static void main(String[] args) { Connection con=null; try { //获得数据库连接 java.lang.Class.forName("oracle.jdbc.driver.OracleDriver"); con = DriverManager.getConnection("jdbc:oracle:thin:scott/tiger@localhost:1521:LEGDB"); //测试存储过程 TestStoreProcedure sp=new TestStoreProcedure(); sp.execute(con,"carl_sp_test","carl"); } catch (ClassNotFoundException cnfe) { cnfe.printStackTrace(); } catch (SQLException sqlE) { sqlE.printStackTrace(); }catch(Exception e){ e.printStackTrace(); }finally { if (con != null) { try { con.close(); } catch (Exception e) { } } } } /** * 该方法用来调用Oracle存储过程 * @param con 数据库连接 * @param parameter传入存储过程的参数值 * @throws SQLException SQL 异常 */ public void execute(Connection con,String sp_name, String parameter) throws SQLException{ //调用存储过程 CallableStatement callStat=con.prepareCall("{call "+sp_name+"(?,?,?)}"); //最后一次插入的行数 int last_inserted_rows=0; //总影响行数 int all_effected_rows=0; //设置输入参数值 callStat.setString(1, parameter); //注册存储过程的第二、第三个参数类型 callStat.registerOutParameter(2, OracleTypes.NUMBER); callStat.registerOutParameter(3, OracleTypes.NUMBER); //执行存储过程 callStat.execute(); //从存储过程执行结果中获得第二、第三个参数值 last_inserted_rows=callStat.getInt(2); all_effected_rows=callStat.getInt(3); //关闭CallableStatement,释放资源 callStat.close(); //在控制台中打印结果 System.out.println("最后一次插入条数:"+last_inserted_rows); System.out.println("总影响行数:"+all_effected_rows); } } (5)   程序运行结果. 最后一次插入条数:3 总影响行数:8
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传

当前位置:首页 > 包罗万象 > 大杂烩

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2025 宁波自信网络信息技术有限公司  版权所有

客服电话:4009-655-100  投诉/维权电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服