下面是我学到了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. PHP面向对象(OOP)----分页类

    > 同验证码类,分页也是在个人博客,论坛等网站中不可缺少的方式,通过分页可以在一个界面展示固定条数的数据,而不至于将所有数据全部罗列到一起,实现分页的原理其实就是对数据库查询输出加了一个limi ...

  2. Vuex核心知识(2.0)

    Vuex 是一个专门为 Vue.js 应该程序开发的状态管理模式,它类似于 Redux 应用于 React 项目中,他们都是一种 Flux 架构.相比 Redux,Vuex 更简洁,学习成本更低.希望 ...

  3. hashcode的一些了解

    1.hashcode的作用? hashcode代表对象的特征,在集合类中广泛的使用. 2.hashcode是如何生成的? 在普通的对象中,获得对象的内存的地址,经过一些算法,不同对象生成不同的hash ...

  4. Java多线程程序休眠、暂停与停止

    休眠   在Java多线程中,可以使用sleep()方法在指定毫秒数内让当前正在执行的线程休眠.   下面这段代码,使得主函数的main线程休眠了2000ms,最后输出的间隔时间也是2000ms. p ...

  5. PHP基础学习

    PHP基础学习 <?php //类型 $test=123; var_dump($test);//打印出类型和数值 echo '<hr/>'; echo gettype($test); ...

  6. bootstrap_下拉菜单+头部

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  7. JSON - 使用cJSON 解析Qt通过UDP发送的JSON数据

    1,cJSON支持在C程序中创建和解析JSON数据,其提供多种方法供C程序使用,最直接的是将cJSON.c和cJSON.h加入到C工程中,源代码:https://github.com/DaveGamb ...

  8. Android Realm数据库使用指南

    Android Realm数据库使用指南 Realm数据库, 目前有Java, Objective‑C, React Native, Swift, Xamarin的几种实现, 是一套用来取代SQLit ...

  9. 解决clipboard手机端无法复制的一种思路

    最近,做了一个切图的小项目 主要内容是微信号的推广页面,上面会有精美的图片和微信号:) 点击按钮,会复制到粘贴板上,自己去微信里面粘贴搜索:),懒人会进行一系列复杂操作么,不看好 首先,百度了一下,看 ...

  10. SpringMvc的运行流程

    一.先用文字描述 1.用户发送请求到DispatchServlet 2.DispatchServlet根据请求路径查询具体的Handler 3.HandlerMapping返回一个HandlerExc ...