在日常工作中,当面对比较复杂的数据库操作时不免要写一些比较长的SQL,由于某系SQL有些长(目前我写的最长的貌似有30多行吧),这时候长会面临这个

 
方法 优点 缺点
用"+"串起来 调调格式,可读性比较好,修改方便 字符串反复拼接,降低效率
StringBuiler 安全稳定 降低可读性

并且,较长的SQL会让一些同事看起来感到头疼,望而生畏.每当遇到问题,自己不敢调试,最后都是把问题throw 给我.

 
很久以前倒是尝试了PL/SQL,但是一直有个疑问没有解决,在工作中没有大规模使用,以目前的所学,我认为PL/SQL是ORACLE的精髓.
 
我心中的那个疑问就是: 数据库如何返回多条多列(形如java里的二维数组)的数据给java.说道本质就是在PL/SQL构造自定义类型. 这个先不说,今天主要介绍下返回游标(curosr)的方法.
 
--1.创建一个包,在该包中,我定义rst_cursor是个游标
 
create or replace package the_package_name as
type rst_cursor is ref cursor;
end the_package_name;
/
--2.创建过程
create or replace procedure the_proc(
num_param in number,
curs_param out the_package_name.rst_cursor -- 这就是上面包里定义的游标类型
)
is
begin open curs_param for select * from emp where emp.num = num_param;
--这里直接赋值,不用赋值符号( : )
--for 也可接字符串拼接的SQL,在这里拼接符为"||",类似"+";
end;
 
在java里调用
 
// 创建CallableStatement
// 由于项目持久框架用的Hibernate,所以这里的connction 我用session.getConnection()得到.
CallableStatement cs = connection.prepareCall("{the_proc(?,?)}"); // 给? 赋值
cs.setInt(1,10); //索引从1开始
cs.registerOutParameter(2,oracle.jdbc.OracleTypes.CURSOR); //这个是输出参数类型 // 执行
cs.execute(); // 得到结果
ResultSet rs = (ResultSet)cs.getObject(2); //去的游标的返回值 while(rs.next()){ System.out.println(rs.getInt(1)); //根据select * 的每列类型按序取值即可. }
 
先到这里吧,下篇继续.
 
 
 

最新文章

  1. 关于ps中的锯齿
  2. 更改mysql中当前auto_increment的值的方法
  3. PHP中file_put_contents追加时换行
  4. topo排序 + 用邻接表优化后的
  5. 【HDOJ】1258 Sum It Up
  6. Linux 通过HTTP进行域名更新
  7. Universal Image Loader_图片异步加载
  8. Linxu服务器上安装JDK小白教程
  9. 《HTTP权威指南》6-代理
  10. centos 7 mysql启动失败--学会看错误日志
  11. 解决秒杀活动高并发出现负库存(Redis)
  12. webpack热更新
  13. keepalived+lvs高可用集群
  14. js获取url中参数名也参数值
  15. Android中高亮变色显示文本中的关键字
  16. 已有iptables表的查看
  17. JQuery如何实现双击事件时不触发单击事件,解决鼠标单双击冲突问题
  18. linux安装配置apache服务(httpd)
  19. libxml2 安装及使用
  20. PHP continue和break的用法(深入理解)

热门文章

  1. 谈谈Delphi中的类和对象1---介绍几个概念 && 对象是一个地地道道的指针
  2. 【翻译十六】java-固定对象的定义方法
  3. 【131031】jsp学习实例 (2013-10-31 15:29:28)
  4. HDU1502 Regular Words
  5. Parallel.js初探
  6. VS2010和matlab2010混合编程中char16_t重定义的问题
  7. windows OBJECT查找
  8. 智能车学习(七)——按键矩阵的实现
  9. SQL多表查询案例
  10. 如何将Android Studio项目提交(更新)到github