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();
}
}
}
--创建表
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();
}
}
}
相关文章推荐
- 使用JAVA读取ORACLE BLOB字段实现上传下载
- 在Oracle中使用java对象
- 如何在Oracle中使用Java存储过程 (详解)
- 如何在Oracle中使用Java存储过程 (详解)
- java调用oracle 存储过程 以及游标使用
- [原创]Java中,使用JDBC访问Oracle与SQL Server时的区别
- Oracle存储过程中执行查询返回的结果集,并使用java代码调用【转】
- 在JAVA 源程序中编写SQL语句时使用ORACLE 绑定变量
- 使用java datasource 进行 oracle jdbc 连接
- 如何在Oracle中使用Java存储过程 (详解)
- 使用Oracle+Java的小心!
- 在Java程序中使用Oracle外部用户
- 在JAVA 源程序中编写SQL语句时使用ORACLE 绑定变量
- Oracle内建包UTL_FILE使用说明(转 http://www.blogjava.net/liwei/archive/2007/01/10/92902.aspx)
- Oracle 中Java 对象与PL/SQL类型的映射及使用
- 在Java中使用Oracle blob
- 如何在JAVA程序中使用Struct一次传入多条数据给Oracle的存储过程。
- 如何在Oracle中使用Java存储过程 (详解)
- 使用java + oracle插入clob类型的数据
- oracle中使用java存贮过程