项目中学习技术,这句话真是有道理啊,呵呵
在此次项目中,由于sql比较复杂,就使用存储过程来处理,但是需要返回一个数据集,这就想到了使用游标,但是之前的项目一直没有用过,需要学习一下。今天周末,就利用这个时间收集资料,学习了一下,下面将学习结果总结如下。
表结构:
create table item
(
item_id varchar2(32),
itemname varchar2(50)
)
一.写一个返回游标的存储过程
create or replace procedure getcur(p_rc out sys_refcursor)
is
begin
open p_rc for 'select * from item';
end getcur;
sys_refcursor这个是oracle自带的返回游标的类型。
二.写一段pl/sql测试一下存储过程是否正确
declare
items sys_refcursor;
begin
getcur(items);
for item in items
loop
dbms_output.put_line(item.itemname);
end loop;
end;
三.写一段java代码测试
public void testcur() {
Connection conn = this.getSession().connection();
CallableStatement callsta = null;
ResultSet rs = null;
try {
callsta = conn.prepareCall("{call getcur(?)}");
callsta.registerOutParameter(1, oracle.jdbc.OracleTypes.CURSOR);
callsta.execute();
rs = (ResultSet)callsta.getObject(1);
while(rs.next()){
System.out.println(rs.getString(1));
}
rs.close();
callsta.close();
conn.close();
} catch (Exception e) {
e.printStackTrace();
}
}
1. {call getcur(?)}:调用存储过程,?代码参数
2. callsta.registerOutParameter(1, oracle.jdbc.OracleTypes.CURSOR);这个是设置返回类型,之前使用
java.sql.Types.REF一直报错“java.sql.SQLException: ORA-03115: 不支持的网络数据类型或表示法”,
查询了一下,使用oracle.jdbc.OracleTypes.CURSOR这个就没有问题了。
3.网上查了下,说是可以使用oracle.jdbc.OracleCallableStatement来代替CallableStatement ,
返回结果的时候使用rs = cs.getCursor(1);就可以得到,但是我的使用报类型错误,
分析原因,应该是我使用了连接池c3p0,所以总是报错
分享到:
相关推荐
Spring JdbcTemplate调用Oracle存储过程输出游标结果集实现增删改查
本例是我工作中的一些实操例子,亦是我工作日志,记录在此,既可作为我自己的总结,也可以此分享给同行借鉴。...2.创建oracle存储过程脚本 3.JDBC调用存储过程语句 4.创建Groovy脚本 5.xml入参示例 6.json出参示例
NULL 博文链接:https://vernonchen163.iteye.com/blog/1902788
本示例演示Hibernate 3.2呼叫Oracle的存贮过程和函数,以及通过Hibernate的Query接口简化JDBC的开发步骤--两个步骤得到List集合。使用这种方式开发可以要求开发人员不需要太了解Hibernate框架,但是需要开发人员非常...
new oracle.jdbc.driver.OracleDriver(); DriverManager.registerDriver(driver); 3.加虚拟机参数jdbc.drivers -Djdbc.drivers=oracle.jdbc.driver.OracleDriver 4.从Jdk6.0以后要求,JDBC 4.0 Drivers ...
PL/SQL的学习教程资料,由Java私塾制作,配套视频由私塾在线提供. 系统学习PL/SQL的结构化编程(包括游标、异常、包、触发器、动态sql等);掌握使用jdbc调用存储过程。
6) PL/SQL: 存储在数据库内运行, 其他方法为在数据库外对数据库访问,只适合ORACLE; 2. PL/SQL 1) PL/SQL(Procedual language/SQL)是在标准SQL的基础上增加了过程化处理的语言; 2) Oracle客户端工具访问Oracle...
19、用JDBC如何调用存储过程 69 20、JDBC中的PreparedStatement相比Statement的好处 71 21、写一个用jdbc连接实例。 71 22、ArrayList和Vector的区别? 73 23、List、Set和Map的区别? 74 24、Collection 和 ...
6. 写一段Jdbc连Oracle的程序. 32 7. 编码实现内部类 34 8. 输入n个数字,以逗号,分开;然后可选择升或者降序排序;按提交键就在另一页面显示按什么排序,结果为,提供reset 34 9. 如何去小数点前两位,并四舍五入...
描述使用JDBC连接数据库的过程 72.EJB分为几类?什么是BMP,CMP? 73.什么是JNDI? 74.ADO是什么?ActiveX数据对象,是一个应用级程序接口. 75.四种JDBC方式?目前的版本? 76.EJB有哪几种?区别是什么? 77.JavaBean与...
6.1.2 面向过程与面向对象思想的对比 78 6.1.3 面向对象技术的背景和特点 79 6.2 类的定义与对象的创建 80 6.3 成员变量 81 6.3.1 成员变量的开发与使用 81 6.3.2 成员变量的初始值 82 6.3.3 对象引用...