下面是我学到了Oracle存储过程,在这里跟大家简单的分享一下利用JDBC调用存储过程的例子:

废话就不啰嗦,现在就直接上机代码。

首先我利用的是Oracle中默认的 scott 数据库里的 emp员工信息表作为本次的例子:

如果你的Oracle里没有 emp默认的员工表,需要创建类似以下的 emp表。

在PL/SQL中需要写以下的调用存储过程的代码:

 --在初次打开PL/SQL时要运行以下这行代码
set serveroutput on --创建一个存储过程包
CREATE OR REPLACE PACKAGE mypack
IS
TYPE mycursor IS REF CURSOR;
END mypack; --创建存储过程方法
CREATE OR REPLACE PROCEDURE findEmpJob(
myempno IN NUMBER,
myename OUT varchar2,
myjob OUT VARCHAR2,
other_name OUT mypack.mycursor
)
AS
BEGIN
SELECT ename,job INTO myename,myjob FROM emp WHERE empno=myempno;
OPEN other_name FOR
SELECT ename,job FROM emp WHERE empno IN(
SELECT empno FROM emp
MINUS
SELECT empno FROM emp WHERE empno=myempno
);
END;

先在eclipse中创建一个项目,比如JDBC_procedure。创建好后类似如下这样:

例子用的数据库是Oracle,需要导入的Oracle的jar包

一、创建一个JdbcUtil底层类用来连接数据库,代码如下:

 package testjdbc;

 import java.sql.*;

 public class JdbcUtil {

     private String driver = "oracle.jdbc.driver.OracleDriver";
// 1521是主端口,也可能是其它端口去连接oracle数据库
private String url = "jdbc:oracle:thin:@127.0.0.1:1521:orcl";
private String username = "scott";
private String password = "123456";
private Connection conn;
private CallableStatement cstmt; public String findEmpJob(int myempno) {
// 加载驱动
try {
Class.forName(driver);
} catch (Exception e) {
e.printStackTrace();
throw new RuntimeException("oracle驱动注册失败");
}
// 获取一个连接
try {
conn = DriverManager.getConnection(url, username, password);
} catch (Exception e) {
e.printStackTrace();
throw new RuntimeException("oracle连接获取失败");
} //findEmpJob(1.通过员工号返回ename和job 2.返回其他的员工信息)
String sql = "{call findEmpJob(?,?,?,?)}";
try {
cstmt = conn.prepareCall(sql);
//hibernate从0开始,jdbc从1开始
cstmt.setInt(1,myempno);//in值
cstmt.registerOutParameter(2,Types.VARCHAR);//out值
cstmt.registerOutParameter(3,Types.VARCHAR);//out值
//注册输出游标
cstmt.registerOutParameter(4, oracle.jdbc.OracleTypes.CURSOR);
//执行调用存储过程
cstmt.execute(); String ename = cstmt.getString(2);
String job = cstmt.getString(3);
ResultSet rs = (ResultSet) cstmt.getObject(4); //简单测验一下在控制台输出
System.out.println("员工编号:"+myempno);
System.out.println(ename+"的工作是:" + job);
System.out.println("\n"+"其他员工信息如下:");
//遍历输出其他员工信息
while(rs.next()){
System.out.println( rs.getString("ename") +"的工作是:"+ rs.getString("job"));
}
rs.close();
cstmt.close();
conn.close();
return job;
} catch (SQLException e) {
// TODO Auto-generated catch block
System.out.println("执行过程中异常:"+e.getMessage());
} return "";
}
}

二、创建一个servlet类 比如 Test.java

 package testjdbc;

 import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse; /**
* Servlet implementation class Test
*/
@WebServlet("/Test")
public class Test extends HttpServlet {
private static final long serialVersionUID = 1L; /**
* @see HttpServlet#HttpServlet()
*/
public Test() {
super();
// TODO Auto-generated constructor stub
} protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
int empno = Integer.parseInt( request.getParameter("empno") );
JdbcUtil ju = new JdbcUtil();
ju.findEmpJob(empno);
} protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
doGet(request, response);
} }

三、在写一个jsp页面,例如:index.jsp

 <%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>测试JDBC调用存储过程</title>
</head>
<body>
<form action="Test" method="post">
员工编号:<input name="empno" type="text">
<input type="submit"> </form>
</body>
</html>

下面是运行项目的效果:在控制台中检验输出结果。

成功运行,并跳转到jsp页面

在控制台可以看到如下输出:

到这里利用JDBC调用Oracle的存储过程就介绍完了。

感谢大家的支持!

如需转载请注明出处:http://www.cnblogs.com/ZRJ-boke/p/6626851.html

JDBC调用存储过程的例子的更多相关文章

  1. Java数据库连接--JDBC调用存储过程,事务管理和高级应用

    相关链接:Jdbc调用存储过程 一.JDBC常用的API深入详解及存储过程的调用 1.存储过程的介绍 我们常用的操作数据库语言SQL语句在执行的时候要先进行编译,然后执行,而存储过程是在大型数据库系统 ...

  2. Java数据库连接——JDBC调用存储过程,事务管理和高级应用

    一.JDBC常用的API深入详解及存储过程的调用 相关链接:Jdbc调用存储过程 1.存储过程(Stored Procedure)的介绍 我们常用的操作数据库语言SQL语句在执行的时候需要先编译,然后 ...

  3. jdbc调用存储过程的方法

    ----------------------------jdbc调用存储过程的方法---------------------------------------------------private ...

  4. JDBC调用存储过程

    一. JDBC调用存储过程 (1)使用存储过程SQL编写的程序代码,等一段语句和控制流语句.在创建时被编译成机器代码和存储在数据库中的client转让. 存储过程具有以下优势: 1.所生成的机器代码被 ...

  5. JDBC(13)—JDBC调用存储过程和函数

    步骤: JDBC调用存储过程和函数 步骤: ①:通过Connection对象的prepareCall()方法创建一个CallableStatement对象的实例,在使用Connection对象的pre ...

  6. Java JDBC调用存储过程:无参、输入带参、输出及输出带参

    Java JDBC调用存储过程:无参.输入带参.输出及输出带参 示例代码: package xzg; import java.sql.CallableStatement; import java.sq ...

  7. JDBC调用存储过程,进参出参

    今天做了一个数据表拷贝的功能,用到了存储过程,就写了一个java中用jdbc调用存储过程的代码,成功的实现了功能,晚上跑回家记录下 Connection conn = ConnectionUtil.g ...

  8. oracle学习笔记(二十三)——JDBC调用存储过程以及批量操作

    jdbc调用存储过程 使用并获得out模式的参数返回值 //存储过程为sum_sal(deptno department.deptno%type,sum in out number) Callable ...

  9. jdbc调用存储过程获取多个结果集

    jdbc调用存储过程获取多个结果集 2017年07月26日 21:20:22 Kenny-Liu 阅读数:1486 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.cs ...

随机推荐

  1. Git中.gitignore文件的使用

      在我们使用git的时候,有时候就不想传一些与代码无关的文件到远程仓库中,比如说编译后的文件,.gitignore就可以帮助我们处理这些文件. 生成.gitignore文件 在git bash中使用 ...

  2. mybatis入门-新手注意问题

    参数问题 在映射文件中通过parameterType指定输入参数的类型:在映射文件中通过resultType指定输出结果的类型. 占位符和拼接符问题 #{}表示一个占位符号,#{}接收输入参数,类型可 ...

  3. Jenkins添加用户

    新建用户 Jenkins刚开始的界面是允许访客进行所有操作的,这时Jenkins是有安全隐患的,也不容易去管理.这时,我们需要管理Jenkins的权限,对它的权限进行设置.关于Jenkins权限设置的 ...

  4. 谨慎能捕千秋蝉(二)——CSRF

    CSRF(Cross Site Request Forgery)跨站点请求伪造. CSRF的本质是当重要操作的参数都能被攻击者预测到,才能成功伪造请求. 一.场景演示 下图是一个伪造请求的场景,按顺序 ...

  5. matlab中axis的使用

    % 提示 disp ('该功能练习axis功能'); %初始化快捷式数组 x=-*pi:pi/:*pi; y=sin(x); plot(x,y); title('sin(x)图形'); grid on ...

  6. css特殊字符编码

  7. R语言从小木虫网页批量提取考研调剂信息

    一.从URL读取并返回html树     1.1 Rcurl包         使用Rcurl包可以方便的向服务器发出请求,捕获URI,get 和 post 表单.比R socktet连接要提供更高水 ...

  8. kafka c++客户端编译

    Kafka是一种高吞吐量的分布式发布订阅消息系统,它可以处理消费者规模的网站中的所有动作流数据. 这种动作(网页浏览,搜索和其他用户的行动)是在现代网络上的许多社会功能的一个关键因素. 这些数据通常是 ...

  9. [笔记]关于支持向量机(SVM)中 SMO算法的学习(一)理论总结

    1. 前言 最近又重新复习了一遍支持向量机(SVM).其实个人感觉SVM整体可以分成三个部分: 1. SVM理论本身:包括最大间隔超平面(Maximum Margin Classifier),拉格朗日 ...

  10. ci公共模型类

    我们都知道,操作数据库的方法都写在模型中.但是一般情况下,一张表往往至少对应4个操作,也就是所谓crud.那么如果20张表,所对应的模型方法,就达到了80个,重复的操作显然这已经是一个体力活儿. 那么 ...