下面是我学到了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

最新文章

  1. Linux命令详解之—tail命令
  2. GDI+ 绘制经验
  3. JS-数组冒泡排序
  4. android shape使用总结
  5. Python自动化 【第十篇】:Python进阶-多进程/协程/事件驱动与Select\Poll\Epoll异步IO
  6. 你不知道的javascript
  7. flask-cors 实现跨域请求
  8. linux下python启动第三方程序,并控制关闭
  9. ubuntu安装 ibus-google输入法
  10. Openstack Grizzily 单节点测试机安装( All In One CentOS/RHEL)
  11. if条件
  12. STL学习系列二:Vector容器
  13. COM简单应用示例
  14. Scanner中next()和nextline()读取字符串方法和区别
  15. c# 绘图常用对象和方法
  16. Java 程序员必须掌握的 Linux 命令
  17. js转换ascii编码如中文友转换为编码友;可防止乱码
  18. mac 下搭建 Android 开发环境
  19. Python 脚本帮你找出微信上删除了你的“好友“
  20. 【WCF系列二:如何调用WCF服务】WCF入门教程(图文)VS2012

热门文章

  1. Java多线程程序休眠、暂停与停止
  2. php基础知识掌握——四种界定符
  3. java程序测试之字符流
  4. Unity渲染优化中文翻译(三)——GPU的优化策略
  5. SuperWebClient -一个基于CURL的.NET HTTP/HTTPS模拟神组件(2)
  6. 史上最全的AJAX
  7. 基于Asp.Net Core Mvc和EntityFramework Core 的实战入门教程系列-1
  8. java线程学习(二)
  9. 2017-3-10 SQL server 数据库 T--SQL语句
  10. JavaScript中冒泡排序