在Oralce数据库中,java调用plsql

来源:互联网 发布:个人云计算怎么赚钱 编辑:程序博客网 时间:2024/05/16 18:55

针对oralce数据库
一:无返回值的存储过程:
CREATE OR REPLACE PROCEDURE TESTA(PARA1 IN VARCHAR2,PARA2 IN VARCHAR2)  AS
BEGIN
   INSERT INTO HYQ.B_ID (I_ID,I_NAME) VALUES (PARA1, PARA2);
END TESTA;
java里的调用代码如下:
Class.forName("driverName");
Connection con=DriverManage.getConnection(strUrl,"username","password");
CallableStatement cs = con.prepareCall("{call schemeName.plsqlFunctionName(?,?)}");
cs.setString(1,"100");
cs.setString(2,"TestOne");
cs.execute();
二:有返回值的存储过程(非结果集)
CREATE OR REPLACE PROCEDURE TESTB(PARA1 IN VARCHAR2,PARA2 OUT VARCHAR2)  AS
BEGIN
   SELECT I_NAME INTO PARA2 FROM TESTTB WHERE I_ID= PARA1;
END TESTB;

Class.forName("driverName");
Connection con=DriverManage.getConnection(strUrl,"username","password");
CallableStatement cs = con.prepareCall("{call schemeName.plsqlFunctionName(?,?)}");
cs.setString(1,"100");
cs.registerOutParameter(2,Types.VARCHAR);
cs.execute();
String outPutResult= cs.getString(2);
注意,这里的proc.getString(2)中的数值2并非任意的,
而是和存储过程中的out列对应的,如果out是在第一个位置,那就是proc.getString(1),
如果是第三个位置,就是proc.getString(3),当然也可以同时有多个返回值,那就是再多加几个out参数了。
三:返回值是结果集的情况:
首先,建立一个程序包:
CREATE OR REPLACE PACKAGE TEST_PACKAGE AS
TYPE Test_CURSOR IS REF CURSOR;
end TESTPACKAGE;
然后,建立存储过程:
CREATE OR REPLACE PROCEDURE TEST_PROCEDURE(test_CURSOR out TEST_PACKAGE.Test_CURSOR) IS
BEGIN
 OPEN test_CURSOR FOR SELECT * FROM SCHEME_NAME.TABLE_NAME;
END TEST_PROCEDURE;
可以看出,它把游标做为一个out参数来返回值的。
java里的调用代码如下:
CallableStatement cs = con.prepareCall("{call schemeName.plsqlFunctionName(?)}");
cs.registerOutParameter(1,oracle.jdbc.OracleTypes.CURSOR);
cs.execute();
ResultSet rs=(ResultSet)cs.getObject(1);
while(rs.next()){
System.out.println(rs.getString(1)+" "+rs.getString(2));
}

使用存储过程的好处
  相对于直接使用SQL语句,在应用程序中直接调用存储过程有以下好处:

  (1)减少网络通信量。调用一个行数不多的存储过程与直接调用SQL语句的网络通信量可能不会有很大的差别,可是如果存储过程包含上百行SQL语句,那么其性能绝对比一条一条的调用SQL语句要高得多。

  (2)执行速度更快。有两个原因:首先,在存储过程创建的时候,数据库已经对其进行了一次解析和优化。其次,存储过程一旦执行,在内存中就会保留一份这个存储过程,这样下次再执行同样的存储过程时,可以从内存中直接调用。

  (3)更强的适应性:由于存储过程对数据库的访问是通过存储过程来进行的,因此数据库开发人员可以在不改动存储过程接口的情况下对数据库进行任何改动,而这些改动不会对应用程序造成影响。

  (4) 布式工作:应用程序和数据库的编码工作可以分别独立进行,而不会相互压制。

原创粉丝点击