案例1,要求:可以向book表添加书,并通过Java程序调用该过程1.1 创建表

create table book(bookId number,bookName varchar2(20),publishHosuse varchar2(20));

1.2 编写过程,无返回值

create or replace procedure test_pro9(tbookId number,tbookName varchar2,tpublishHouse varchar2) is
begin
insert into book values(tbookId,tbookName,tpublishHouse);
end;

在Java中调用

package com.oracle;
import java.sql.*;
public class TestPaging {
public static void main(String args[]){
try {
//1.加载驱动
Class.forName("oracle.jdbc.driver.OracleDriver");
//2.得到链接
Connection ct=DriverManager.getConnection("jdbc:oracle:thin:@127.0.0.1:1521:mydev","scott","tiger");
//3.创建CallableStaement
CallableStatement cs=ct.prepareCall("{call test_pro9(?,?,?)}");
//4.给问号赋值
cs.setInt(1,1);
cs.setString(2,"笑傲江湖");
cs.setString(3,"人民出版社");
//5.执行
cs.execute();
//6.关闭资源
cs.close();
ct.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}

1.3创建存储过程,有返回值

--in 表示输入,默认就是in,out是输出
create or replace procedure test_pro10(tId in number,tname out varchar2) is
begin
select bookName into tname from book where bookId=tId;
end;

在Java中调用

package com.oracle;
import java.sql.*;
public class TestPaging {
public static void main(String args[]){
try {
//1.加载驱动
Class.forName("oracle.jdbc.driver.OracleDriver");
//2.得到链接
Connection ct=DriverManager.getConnection("jdbc:oracle:thin:@127.0.0.1:1521:mydev","scott","tiger");
//3.创建CallableStaement
CallableStatement cs=ct.prepareCall("{call test_pro10(?,?)}");
//4.给问号赋值
cs.setInt(1,1);
cs.registerOutParameter(2,oracle.jdbc.OracleTypes.VARCHAR);
//5.执行
cs.execute();
String bookname=cs.getString(2);
System.out.println("1号书的名字是:"+bookname);
//6.关闭资源
cs.close();
ct.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}

1.4创建存储过程,有返回值,并且是个结果集

--建立一个包
create or replace package test_pck2 as
type test_cursor is ref cursor;
end test_pck2; --建立一个存储过程
create procedure test_pro11(tNo in number,t_cursor out test_pck2.test_cursor) is
begin
open t_cursor for select * from myemp where deptno=tNo;
end;

在Java中调用

package com.oracle;
import java.sql.*;
public class TestPaging {
public static void main(String args[]){
try {
//1.加载驱动
Class.forName("oracle.jdbc.driver.OracleDriver");
//2.得到链接
Connection ct=DriverManager.getConnection("jdbc:oracle:thin:@127.0.0.1:1521:mydev","scott","tiger");
//3.创建CallableStaement
CallableStatement cs=ct.prepareCall("{call test_pro11(?,?)}");
//4.给问号赋值
cs.setInt(1,10);
cs.registerOutParameter(2,oracle.jdbc.OracleTypes.CURSOR);
//5.执行
cs.execute();
//6.得到结果集
ResultSet rs=(ResultSet)cs.getObject(2);
while(rs.next()){
System.out.println(rs.getInt(1)+" "+rs.getString(1));
}
//7.关闭资源
cs.close();
ct.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}

 

案列2,编写分页的过程

要求:输入表名,每页显示记录数,当前页,返回总记录数,总页数和返回结果集

--要求:输入表名,每页显示记录数,当前页,返回总记录数,总页数和返回结果集
--创建一个包,定义一个游标
create or replace package test_pck2 as
type test_cursor is ref cursor;
end test_pck2; create or replace procedure test_pro12
(tableName in varchar2, --表名
pageCount in number, --每页记录数
pageNow in number, --当前页
allRows out number, --总记录数
allPages out number, --总页数
p_cursor out test_pck2.test_cursor --返回的结果集
) is
--定义部分
--定义两个整数
v_begin number:=(pageNow-1)*pageCount+1;
v_end number:=pageNow*pageCount;
--定义SQL语句,字符串
v_sql varchar2(1000);
begin
v_sql:='select * from (select a1.*,rownum rn from (select * from '||tableName||') a1 where rownum<='||v_end||') where rn>'||v_begin;
--把游标和SQL关联起来
open p_cursor for v_sql;
--计算allRows
v_sql:='select count(*) from '||tableName;
execute immediate v_sql into allrows;
--计算allPages,注意取模的函数的写法
if mod(allRows,pageCount)=0 then
allPages:=allRows/pageCount;
else
allPages:=allRows/pageCount+1;
end if;
--关闭游标
--close p_cursor;
end;

使用Java测试

package com.oracle;
import java.sql.*;
public class TestPaging {
public static void main(String args[]){
try {
//1.加载驱动
Class.forName("oracle.jdbc.driver.OracleDriver");
//2.得到链接
Connection ct=DriverManager.getConnection("jdbc:oracle:thin:@127.0.0.1:1521:mydev","scott","tiger");
//3.创建CallableStaement
CallableStatement cs=ct.prepareCall("{call test_pro12(?,?,?,?,?,?)}");
//4.给问号赋值
cs.setString(1,"emp");
cs.setInt(2,5);
cs.setInt(3,1);
//注册总记录数
cs.registerOutParameter(4,oracle.jdbc.OracleTypes.INTEGER);
//注册总页数
cs.registerOutParameter(5,oracle.jdbc.OracleTypes.INTEGER);
//注册返回的结果集
cs.registerOutParameter(6,oracle.jdbc.OracleTypes.CURSOR);
//5.执行
cs.execute();
//取出总记录数
int rowNum=cs.getInt(4);
//取出总页数
int allCount=cs.getInt(5);
ResultSet rs=(ResultSet)cs.getObject(6);
//取出结果
System.out.println("总记录数: "+rowNum);
System.out.println("总页数: "+allCount);
while(rs.next()){
System.out.println("编号:"+rs.getInt(1)+"名字: "+rs.getString(2)); //注意这里的数字1,2分表代表表中的1,2列
}
//7.关闭资源
cs.close();
ct.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}

最新文章

  1. hibernate集合类型映射
  2. Android 笔记
  3. powerpoint无法输入中文怎么办|ppt文本框无法输入中文解决办法
  4. eclipse重构详解(转)
  5. 基于H5的混合开发介绍(一)WebView
  6. 4.Centos7安装JDK8以及环境配置
  7. HTML学习笔记Day10
  8. 【C++】vector内存机制和性能分析
  9. jQuery的appendTo案例
  10. LeetCode107.二叉树的层次遍历II
  11. Spring Boot 项目初始化
  12. python-minidom模块【解析xml】
  13. 关于Unity中LOD和渲染队列----渲染通道通用指令(一)
  14. php 跳出循环的几种方式
  15. 人工智能是如何改变IT运维和DevOps的?
  16. leetcode-1-TwoNums
  17. 2018 Multi-University Training Contest 3
  18. SqlDataReader的关闭问题,报错:“阅读器关闭时尝试调用 Read 无效”
  19. 解决 jersey 单jar包 IME media type text/plain was not found.
  20. 如何优化tomcat配置优化

热门文章

  1. Python获取时间范围内日期列表和周列表的函数
  2. Python socket聊天室程序
  3. svn 使用笔记(一)
  4. JavaScript高级 面向对象(7)--深拷贝与浅拷贝
  5. Java中常见的异常__
  6. HttpClient-4.3.X 中get和post方法使用
  7. 怎样使GridView中满足某个条件的行可编辑,其余行不可编辑?
  8. datagridview导出到excel
  9. 【C#/WPF】窗体定时自动关闭
  10. sizeof数据对齐问题