您的位置:首页 > 数据库 > Oracle

oracle---使用java

2017-01-18 19:02 120 查看
先介绍下,函数定义时的in和out

--创建表

create table book(bookId number,bookName varchar2(50), publishHouse varchar2(50));

--编写过程

create or replace procedure sp_pro6(spbookId in number,

spbookName in varchar2, sppublishHouse in varchar2) is

--spBookId in number, in是默认的,可省略的,代表这个是向存储过程输入的变量,而不是输出的

--out表示 输出参数

begin
insert into book values(spbookId,spbookName,sppublishHouse);

end;

有返回值的存储过程,返回的是结果集

编译一个过程,输入部门号,返回该部门员工信息

由于oracle储存过程没有返回值,他的所有返回值都是通过out参数来替代的,列表同样也不例外,但由于是集合,所以不能用一般的参数,必须要用package。

要分2个部分

(1)建一个包

create or replace package testpackage AS

type test_cursor is ref cursor;--游标类型

end testpackage;

(2)建立存储过程

create or replace procedure sp_pro6(spNo in number,p_cursor out testpackage.test_cursor) is

begin

open p_cursor for select * from emp where deptno=spNo;

end;

相关知识介绍完毕,下面开始进行oracle查询分页的内容

--开发一个包,因为分页过程需要定义一个游标,使用游标之前,需要先开发一个包

create or replace package testpackage as 

type test_cursor is ref cursor;

end testpackage;

编写分页的过程

create or replace procedure fenye(

tableName in varchar2,

pageSize in number,--每页显示的记录数

pageNow in number,--当前看第几页

myrows out number,--总记录数

myPageCount out number, --总页数

p_cursor out testpackage.test_cursor  --返回的记录集

) is

--定义部分

v_sql varchar2(1000);

v_begin number:=(pageNow-1)*pageSize+1;

v_end number:=pageNow*pageSize;

begin

--执行部分

--排序的话,在最内层进行 order by

v_sql:='select * from (select t1.* ,rownum rn from(select * from '|| tableName

||') t1 where rownum<='|| v_end ||') where rn>='|| v_begin;

--把游标和sql关联

open p_cursor for v_sql;

--计算myrows 和 mypageCount

--组织一个sql语句

v_sql:='select count(*) from '||tableName;

--执行sql,并把返回的指,赋给myrows

execute immediate v_sql into myrows;

--计算mypagecount

if mod(myrows,pageSize)=0 then
myPageCount := myrows/pageSize;

else
myPageCount := myrows/pageSize+1;

end if;

--关闭游标

end;

java代码如下:

package com.sp;

import java.sql.*;

//测试分页

public class FenYe {

public static void main(String[] args) {
// TODO Auto-generated method stub
try{
Class.forName("oracle.jdbc.driver.OracleDriver");
Connection ct= DriverManager.getConnection("jdbc:oracle:thin:@127.0.0.1:1521:orcl","scott","Hy820930");
CallableStatement cs=ct.prepareCall("{call fenye(?,?,?,?,?,?)}");

//给?赋值
cs.setString(1, "emp");//第一个参数是表名
cs.setInt(2, 5);//第2个参数是,每页显示的记录条数
cs.setInt(3, 2);//第3个参数是,当前看第几页
cs.registerOutParameter(4, oracle.jdbc.OracleTypes.INTEGER);//注册总记录数
cs.registerOutParameter(5, oracle.jdbc.OracleTypes.INTEGER);//注册总页数
cs.registerOutParameter(6, oracle.jdbc.OracleTypes.CURSOR);//注册返回的结果集

cs.execute();
int rowNum=cs.getInt(4);
int pageCount=cs.getInt(5);
ResultSet rs = (ResultSet) cs.getObject(6);
while(rs.next()){
System.out.println("编号:"+rs.getInt(1)+""+"名字:"+rs.getString(2));
}
System.out.println(rowNum+"===="+pageCount);
}catch(Exception e){
e.printStackTrace();
}
}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: