java 调用oracle数据库返回的结果集
程序员文章站
2022-05-09 22:18:27
...
例子表结构:
-- Create table create table YONGHU ( USERID NUMBER not null, NAME VARCHAR2(20) not null, AGE VARCHAR2(20) not null ) tablespace TEST pctfree 10 initrans 1 maxtrans 255 storage ( initial 128K next 128K minextents 1 maxextents unlimited pctincrease 0 ); -- Create/Recreate primary, unique and foreign key constraints alter table YONGHU add constraint PK_TEST_ID primary key (USERID) using index tablespace USERS pctfree 10 initrans 2 maxtrans 255 storage ( initial 64K minextents 1 maxextents unlimited );
jvav调用oracle返回的数据集我想到的有三种实现方式:调用sql语句、调用视图、存储过程这里主要说明存储过程调用。
由于在定义Oracle存储过程时无法直接指定参数的数据类型为:ref cursor,而是首先通过以下方法将ref cursor进行了重定义:
1、定义包,在包中定义数据类型:FuxjResultSet(ref cursor类型)
--定义FuxjPackage包,定义ref cursor类型 create or replace package FuxjPackage is type FuxjResultSet is ref cursor; end FuxjPackage;
2、定义存储过程使用:FuxjResultSet类型的数据作为输出参数返回数据集
--存储过程使用ref cursor类型的变量返回数据集 create or replace procedure getemps(p_cursor out FuxjPackage.FuxjResultSet, userName in varchar2) as begin open p_cursor for select * from yonghu where name = userName; end;
3、oracle自己调用
declare userId number; name varchar2(20); age varchar2(20); rownum_ integer; c FuxjPackage.FuxjResultSet; begin name := '熊敏'; getemps(c, name); --orecle调用时输出参数将定义的和输出参数一样类型的数据放入参数位置即可 loop FETCH c INTO userId, name,age; EXIT WHEN c%NOTFOUND; DBMS_OUTPUT.PUT_LINE(userId || '===' || name || '====' || age || '=='); END LOOP; CLOSE c; end;
4、java代码调用
package dao; import java.sql.*; import java.sql.Connection; import oracle.jdbc.driver.*; //该包位于 ojdbc14.jar 中 public class Proc { public static void main(String[] args) { try { String driver_class = "oracle.jdbc.driver.OracleDriver"; String connect_string = "jdbc:oracle:thin:@127.0.0.1:1521:min"; /*要变动的是数据库服务器的地址以及数据库名称"psmis"*/ String query = "call getemps(?,'熊敏')"; //调用存储过程的语法,输出参数用”?“表示 Connection conn; Class.forName(driver_class); conn = DriverManager.getConnection(connect_string, "test", "test"); //链接、用户名、密码 CallableStatement cstmt = conn.prepareCall(query); //CallableStatement 为调用存储过程的特有类 cstmt.registerOutParameter(1, OracleTypes.CURSOR); //注册存储过程的输出参数为游标类型--即resultSet类型 cstmt.execute(); //执行存储过程 ResultSet rset = (ResultSet) cstmt.getObject(1); //获取数据集合 while (rset.next()) System.out.println(rset.getString(1) + rset.getString(2) + rset.getString(3)); cstmt.close(); } catch (Exception a) { a.printStackTrace(); } } }
说明:需要导入ojdbc14.jar、classes12.jar
(路劲oracle安装目录D:\oracle\product\10.2.0\db_1\install\patches\5923165\files\jdbc\lib)
上一篇: CCTV与西方媒体的区别
下一篇: Mybatis结果集自动映射