JDBC调用存储过程的例子
下面是我学到了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调用存储过程的例子的更多相关文章
- Java数据库连接--JDBC调用存储过程,事务管理和高级应用
相关链接:Jdbc调用存储过程 一.JDBC常用的API深入详解及存储过程的调用 1.存储过程的介绍 我们常用的操作数据库语言SQL语句在执行的时候要先进行编译,然后执行,而存储过程是在大型数据库系统 ...
- Java数据库连接——JDBC调用存储过程,事务管理和高级应用
一.JDBC常用的API深入详解及存储过程的调用 相关链接:Jdbc调用存储过程 1.存储过程(Stored Procedure)的介绍 我们常用的操作数据库语言SQL语句在执行的时候需要先编译,然后 ...
- jdbc调用存储过程的方法
----------------------------jdbc调用存储过程的方法---------------------------------------------------private ...
- JDBC调用存储过程
一. JDBC调用存储过程 (1)使用存储过程SQL编写的程序代码,等一段语句和控制流语句.在创建时被编译成机器代码和存储在数据库中的client转让. 存储过程具有以下优势: 1.所生成的机器代码被 ...
- JDBC(13)—JDBC调用存储过程和函数
步骤: JDBC调用存储过程和函数 步骤: ①:通过Connection对象的prepareCall()方法创建一个CallableStatement对象的实例,在使用Connection对象的pre ...
- Java JDBC调用存储过程:无参、输入带参、输出及输出带参
Java JDBC调用存储过程:无参.输入带参.输出及输出带参 示例代码: package xzg; import java.sql.CallableStatement; import java.sq ...
- JDBC调用存储过程,进参出参
今天做了一个数据表拷贝的功能,用到了存储过程,就写了一个java中用jdbc调用存储过程的代码,成功的实现了功能,晚上跑回家记录下 Connection conn = ConnectionUtil.g ...
- oracle学习笔记(二十三)——JDBC调用存储过程以及批量操作
jdbc调用存储过程 使用并获得out模式的参数返回值 //存储过程为sum_sal(deptno department.deptno%type,sum in out number) Callable ...
- jdbc调用存储过程获取多个结果集
jdbc调用存储过程获取多个结果集 2017年07月26日 21:20:22 Kenny-Liu 阅读数:1486 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.cs ...
随机推荐
- HUST 1586 数字排列
1586 - 数字排列 时间限制:1秒 内存限制:128兆 91 次提交 36 次通过 题目描述 现有n个k位的数字,你的任务是重新安排数字每一位的位置,使得重新安排后这n个数字中最大的数字和最小的数 ...
- Jquery AutoComplete实现搜索自动完成
AutoComplete控件就是指用户在文本框输入前几个字母或是汉字的时候,该控件就能从存放数据的文本或是数据库里将所有以这些字母开头的数据提示给用户,供用户选择,提供方便. 例子: <!doc ...
- JLOI2015 解题报告
JLOI2015 真的不愧是NOI出题组出的,题目难度够吊.不过每一道都是结论题和乱搞题真的很不好玩... T1:[JLOI2015]有意义的字符串 首先贴下popoqqq的blog吧 感性的认识就是 ...
- SDOI Day1
好了做了SDOI day1的3道题,来讲下做法及感想吧 T1:排序(暴力,搜索) 题目:http://www.lydsy.com/JudgeOnline/problem.php?id=3990 我们可 ...
- java split函数应该注意的问题
split函数的参数是一个String,但是这个String会被解释成一个正则表达式. 比如 "test.txt".split(".").length得到的值是 ...
- WP8.1开发中对于XAML中一些语言的学习(1);
以前在学习WP开发的时候,看到视频中说到程序在创建之初,MainPaige.xaml页面上有一些代码: <Page x:Class="草案.MainPage" xmlns=& ...
- 在Windows Server2016里通过Hyper-V安装Liunx Container
Windows Server2016正式发布已经有一段时间了.无可厚非,原生Docker的支持是这个版本一个非常大的亮点. Windows Container 的安装在网上有很多教程,我这里不过多的描 ...
- Linux下软件设成系统服务运行
将软件的启动脚本copy到/etc/init.d/soft_name chmod 777 soft_name 设置服务开机启动 chkconfig soft_name ...
- Android 退出多Activity的application的方式
在开发过程中,我们常常需要一个退出功能,来退出该应用的所有Activity.下面,我们列举一些退出应用的几种方式.以下用的源码点击查看源码地址 欢迎star,欢迎fork 利用ActivityCont ...
- Google addword 策略
https://support.google.com/adwords/answer/1704392?hl=zh-Hans&authuser=0 顾客会用自己的思路去解决生意上的问题,想要拥有自 ...