JAVA操作ORACLE数据库的存储过程
一、任务提出
JAVA操作oracle11g存储过程实验需要完成以下几个实例:
1.调用没有返回参数的过程(插入记录、更新记录)
2.有返回参数的过程
3.返回列表的过程
4.返回带分页的列表的过程。
二、建立表和相应的存储过程
create table student (sno int ,sname varchar2(20),sage int);
--创建存储过程testa1
create or replace procedure testa1(para1 in int,para2 in varchar2,para3 in int)
is
begin
insert into student(sno,sname,sage) values(para1,para2,para3);
commit;
end;
/
--创建存储过程testa2
create or replace procedure testa2(para1 in int,para2 in int)
is
begin
update student set sage=para2 where sno=para1;
commit;
end;
/
--创建有返回参数的存储过程testb
create or replace procedure testb(para1 in int ,para2 out varchar2,para3 out int)
is
begin
select sname,sage into para2,para3 from student where sno=para1;
end;
--创建返回集合的存储过程:
--在oracle中,如果要返回集合必须是返回游标,不能是一张二维表。所以,要先建立包。
create or replace package testpack
is
type test_cursor is ref cursor;
end testpack;
/ create or replace procedure testc(p_cursor out testpack.test_cursor)
is
begin
open p_cursor for select * from student;
end;
/
--实现分页的存储过程
---ps 每页几个记录,cs第几页
create or replace procedure testd(ps int ,cs int ,p_cursor out testpack.test_cursor)
is
begin
open p_cursor for
select * from (select student.*,rownum rn from student) where rn>ps*(cs-1) and rn<=ps*cs;
end;
/
三、java操作调用上述存储过程
package com.oaj;
import java.sql.*; import com.sun.org.apache.xalan.internal.xsltc.compiler.util.Type; public class Test {
String driver="oracle.jdbc.driver.OracleDriver";
String strUrl="jdbc:oracle:thin:@localhost:1521:orcl";
ResultSet rs=null;
Connection conn=null; CallableStatement cstmt=null; public static void main(String[] args)
{
new Test().testPageSet(3,1);
}
public void testPageSet(int recordPerPage,int currentPage)
{
try
{
Class.forName(driver);
conn=DriverManager.getConnection(strUrl,"scott","scott");
cstmt=conn.prepareCall("{ call scott.testd(?,?,?)}");
cstmt.registerOutParameter(3, oracle.jdbc.OracleTypes.CURSOR);//指定是oracle里规定的类型
cstmt.setInt(1,recordPerPage);
cstmt.setInt(2, currentPage);
cstmt.execute();
rs=(ResultSet)cstmt.getObject(3); while(rs.next())
{
System.out.print("学号是:"+rs.getInt(1)+"的学生的名字是:"+rs.getString(2)+",年龄是:"+rs.getInt(3)+"\r\n");
}
}
catch(SQLException ex)
{
ex.printStackTrace();
}
catch(Exception ex)
{
ex.printStackTrace(); }
finally
{
try
{
if(cstmt!=null)
cstmt.close();
if(conn!=null)
{
conn.close();
conn=null;
} }
catch(SQLException ex)
{
ex.printStackTrace();
}
}
}
public void testOutResult()
{
try
{
Class.forName(driver);
conn=DriverManager.getConnection(strUrl,"scott","scott");
cstmt=conn.prepareCall("{ call scott.testc(?)}");
cstmt.registerOutParameter(1, oracle.jdbc.OracleTypes.CURSOR);//指定是oracle里规定的类型
cstmt.execute();
rs=(ResultSet)cstmt.getObject(1); while(rs.next())
{
System.out.print("学号是:"+rs.getInt(1)+"的学生的名字是:"+rs.getString(2)+",年龄是:"+rs.getInt(3)+"\r\n");
}
}
catch(SQLException ex)
{
ex.printStackTrace();
}
catch(Exception ex)
{
ex.printStackTrace(); }
finally
{
try
{
if(cstmt!=null)
cstmt.close();
if(conn!=null)
{
conn.close();
conn=null;
} }
catch(SQLException ex)
{
ex.printStackTrace();
}
}
}
public void testOutParameter(int inputSno)
{
try
{
Class.forName(driver);
conn=DriverManager.getConnection(strUrl,"scott","scott");
cstmt=conn.prepareCall("{ call scott.testb(?,?,?)}");
cstmt.setInt(1, inputSno);
cstmt.registerOutParameter(2, Types.VARCHAR);
cstmt.registerOutParameter(3, Types.INTEGER); cstmt.execute();
String name=cstmt.getString(2);
int age=cstmt.getInt(3); System.out.print("学号是:"+inputSno+"的学生的名字是:"+name+",年龄是:"+age);
}
catch(SQLException ex)
{
ex.printStackTrace();
}
catch(Exception ex)
{
ex.printStackTrace(); }
finally
{
try
{
if(cstmt!=null)
cstmt.close();
if(conn!=null)
{
conn.close();
conn=null;
} }
catch(SQLException ex)
{
ex.printStackTrace();
}
}
}
public void testNoOutParameterUpdate(int inputeSno,int inputSage)
{
try
{
Class.forName(driver);
conn=DriverManager.getConnection(strUrl,"scott","scott");
cstmt=conn.prepareCall("{ call scott.testa2(?,?)}");
cstmt.setInt(1, inputeSno);
cstmt.setInt(2, inputSage);
cstmt.execute();
System.out.println("执行成功!");
}
catch(SQLException ex)
{
ex.printStackTrace();
}
catch(Exception ex)
{
ex.printStackTrace(); }
finally
{
try
{
if(cstmt!=null)
cstmt.close();
if(conn!=null)
{
conn.close();
conn=null;
} }
catch(SQLException ex)
{
ex.printStackTrace();
}
}
}
public void testNoOutParameterInsert(int a,String b,int c)
{
try
{
Class.forName(driver);
conn=DriverManager.getConnection(strUrl,"scott","scott");
cstmt=conn.prepareCall("{ call scott.testa1(?,?,?)}");
cstmt.setInt(1, a);
cstmt.setString(2, b);
cstmt.setInt(3, c);
cstmt.execute();
}
catch(SQLException ex)
{
ex.printStackTrace();
}
catch(Exception ex)
{
ex.printStackTrace(); }
finally
{
try
{
if(cstmt!=null)
cstmt.close();
if(conn!=null)
{
conn.close();
conn=null;
} }
catch(SQLException ex)
{
ex.printStackTrace();
}
}
}
}
JAVA操作ORACLE数据库的存储过程的更多相关文章
- Java操作Oracle数据库以及调用存储过程
操作Oracle数据库 publicclass DBConnection { //jdbc:oracle:thin:@localhost:1521:orcl publicstaticf ...
- Java 操作Oracle数据库
import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import ...
- JAVA操作Oracle数据库中的事务
实验1: create table yggz(code int, salary number(7,2)); insert into yggz values(1, 1000); insert into ...
- Java java jdbc thin远程连接并操作Oracle数据库
JAVA jdbc thin远程连接并操作Oracle数据库 by:授客 QQ:1033553122 测试环境 数据库:linux 下Oracle_11g_R2 编码工具:Eclipse 编码平台:W ...
- loadrunner 脚本开发-调用java jar文件远程操作Oracle数据库测试
调用java jar文件远程操作Oracle数据库测试 by:授客 QQ:1033553122 测试环境 数据库:linux 下Oracle_11g_R2 Loadrunner:11 备注:想学ora ...
- dos命令行连接操作ORACLE数据库
C:\Adminstrator> sqlplus "/as sysdba" 查看是否连接到数据库 SQL> select status from v$instance; ...
- java 操作Oracle 批量入库的问题
java 操作Oracle 批量入库的问题 先说下我运行的环境: Windows7 64位操作系统 (四核)Intel i5-2300 CPU @2.80GHz 内存4G 硬盘1T Jdk1.6+My ...
- 在.NetCore(C#)中使用ODP.NET Core+Dapper操作Oracle数据库
前言 虽然一直在说"去IOE化",但是在国企和政府,Oracle的历史包袱实在太重了,甚至很多业务逻辑都是写在Oracle的各种存储过程里面实现的-- 我们的系统主要的技术栈是Dj ...
- Java操作Oracle
public class DBCon { // 数据库驱动对象 public static final String DRIVER = "oracle.jdbc.driver.OracleD ...
随机推荐
- Python基本数据类型之str
一.创建 s = "morra" s = str("morra") #str()这种方法会自动找到str类里的_init_方法去执行 ------------- ...
- 我所了解的JavaScript糟粕和鸡肋
糟粕 全局变量 众所周知,全局变量在很小的程序中可能会带来方便,但随着程序变得越来大,全局变量将难以处理,全局变量将降低程序的可靠性. 在js中有3种方式定义全局变量 脱离任何函数安排一个var语句 ...
- 从Paxos到ZooKeeper-二、ZooKeeper和Paxos
ZooKeeper为分布式应用提供了高效且可靠的分布式协调服务,提供了诸如tong'yi统一命名服务.配置管理和分布式锁等分布式的基础服务.在解决分布式数据一致性方面,ZooKeeper并没有直接采用 ...
- BZOJ3226: [Sdoi2008]校门外的区间
感觉很有趣的题呢. 每个点拆成两个,线段树维护. 不过这题难点其实在输入输出. #include<bits/stdc++.h> #define N (1<<17) #defin ...
- 【原】web移动端常用知识点笔记
摘要:因为平时搞移动端的比例多一点,做个小小的总结.虽然网上很多这方面的总结,不过还是想自己也总结一下,适合自己的才是最好的.这样也方便以后自己的查阅 viewport模板——通用 <!DOCT ...
- ubuntu下安装wine1.8和阿里旺旺
参考:http://www.linuxidc.com/Linux/2015-12/126722.htm和http://www.linuxidc.com/Linux/2016-05/131131.htm ...
- CV界的明星人物们
CV界的明星人物们 来自:http://blog.csdn.net/necrazy/article/details/9380151,另外根据自己关注的地方,加了点东西. 今天在cvchina论坛上看到 ...
- css 父层 透明 子层不透明Alpha
html代码 <div class="user2-register-bg"> <div class="user2-register-con"& ...
- JS中call和apply
作用: 替换当前对象的方法中的this. 理解: call和apply是为了动态改变this出现的,当一个object没有某个方法,但是其他的有,我们可以借助call或apply用其它对象的方法来操作 ...
- JS 语言的Function 解析
1.最基本的作为一个本本分分的函数声明使用. 复制代码代码如下: function func(){} 或 var func=function(){}; 2.作为一个类构造器使用: 复制代码代码如下: ...