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

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

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

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

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

  1. --在初次打开PL/SQL时要运行以下这行代码
  2. set serveroutput on
  3.  
  4. --创建一个存储过程包
  5. CREATE OR REPLACE PACKAGE mypack
  6. IS
  7. TYPE mycursor IS REF CURSOR;
  8. END mypack;
  9.  
  10. --创建存储过程方法
  11. CREATE OR REPLACE PROCEDURE findEmpJob(
  12. myempno IN NUMBER,
  13. myename OUT varchar2,
  14. myjob OUT VARCHAR2,
  15. other_name OUT mypack.mycursor
  16. )
  17. AS
  18. BEGIN
  19. SELECT ename,job INTO myename,myjob FROM emp WHERE empno=myempno;
  20. OPEN other_name FOR
  21. SELECT ename,job FROM emp WHERE empno IN(
  22. SELECT empno FROM emp
  23. MINUS
  24. SELECT empno FROM emp WHERE empno=myempno
  25. );
  26. END;

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

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

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

  1. package testjdbc;
  2.  
  3. import java.sql.*;
  4.  
  5. public class JdbcUtil {
  6.  
  7. private String driver = "oracle.jdbc.driver.OracleDriver";
  8. // 1521是主端口,也可能是其它端口去连接oracle数据库
  9. private String url = "jdbc:oracle:thin:@127.0.0.1:1521:orcl";
  10. private String username = "scott";
  11. private String password = "123456";
  12. private Connection conn;
  13. private CallableStatement cstmt;
  14.  
  15. public String findEmpJob(int myempno) {
  16. // 加载驱动
  17. try {
  18. Class.forName(driver);
  19. } catch (Exception e) {
  20. e.printStackTrace();
  21. throw new RuntimeException("oracle驱动注册失败");
  22. }
  23. // 获取一个连接
  24. try {
  25. conn = DriverManager.getConnection(url, username, password);
  26. } catch (Exception e) {
  27. e.printStackTrace();
  28. throw new RuntimeException("oracle连接获取失败");
  29. }
  30.  
  31. //findEmpJob(1.通过员工号返回ename和job 2.返回其他的员工信息)
  32. String sql = "{call findEmpJob(?,?,?,?)}";
  33. try {
  34. cstmt = conn.prepareCall(sql);
  35. //hibernate从0开始,jdbc从1开始
  36. cstmt.setInt(1,myempno);//in值
  37. cstmt.registerOutParameter(2,Types.VARCHAR);//out值
  38. cstmt.registerOutParameter(3,Types.VARCHAR);//out值
  39. //注册输出游标
  40. cstmt.registerOutParameter(4, oracle.jdbc.OracleTypes.CURSOR);
  41. //执行调用存储过程
  42. cstmt.execute();
  43.  
  44. String ename = cstmt.getString(2);
  45. String job = cstmt.getString(3);
  46. ResultSet rs = (ResultSet) cstmt.getObject(4);
  47.  
  48. //简单测验一下在控制台输出
  49. System.out.println("员工编号:"+myempno);
  50. System.out.println(ename+"的工作是:" + job);
  51. System.out.println("\n"+"其他员工信息如下:");
  52. //遍历输出其他员工信息
  53. while(rs.next()){
  54. System.out.println( rs.getString("ename") +"的工作是:"+ rs.getString("job"));
  55. }
  56. rs.close();
  57. cstmt.close();
  58. conn.close();
  59. return job;
  60. } catch (SQLException e) {
  61. // TODO Auto-generated catch block
  62. System.out.println("执行过程中异常:"+e.getMessage());
  63. }
  64.  
  65. return "";
  66. }
  67. }

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

  1. package testjdbc;
  2.  
  3. import java.io.IOException;
  4. import javax.servlet.ServletException;
  5. import javax.servlet.annotation.WebServlet;
  6. import javax.servlet.http.HttpServlet;
  7. import javax.servlet.http.HttpServletRequest;
  8. import javax.servlet.http.HttpServletResponse;
  9.  
  10. /**
  11. * Servlet implementation class Test
  12. */
  13. @WebServlet("/Test")
  14. public class Test extends HttpServlet {
  15. private static final long serialVersionUID = 1L;
  16.  
  17. /**
  18. * @see HttpServlet#HttpServlet()
  19. */
  20. public Test() {
  21. super();
  22. // TODO Auto-generated constructor stub
  23. }
  24.  
  25. protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
  26. // TODO Auto-generated method stub
  27. int empno = Integer.parseInt( request.getParameter("empno") );
  28. JdbcUtil ju = new JdbcUtil();
  29. ju.findEmpJob(empno);
  30. }
  31.  
  32. protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
  33. // TODO Auto-generated method stub
  34. doGet(request, response);
  35. }
  36.  
  37. }

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

  1. <%@ page language="java" contentType="text/html; charset=UTF-8"
  2. pageEncoding="UTF-8"%>
  3. <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
  4. <html>
  5. <head>
  6. <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
  7. <title>测试JDBC调用存储过程</title>
  8. </head>
  9. <body>
  10. <form action="Test" method="post">
  11. 员工编号:<input name="empno" type="text">
  12. <input type="submit">
  13.  
  14. </form>
  15. </body>
  16. </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. java基础知识点---equal,==,hashcode

    1.==比较对象之间的地址是否相同 student a=new student(1); student b=new student(1); a==b   false b=a; a==b   true ...

  2. DataReader的用法程序简析

    // 2015/07/05 using System; using System.Collections.Generic; using System.Linq; using System.Text; ...

  3. Thrift入门初探--thrift安装及java入门实例

    什么是thrift? 简单来说,是Facebook公布的一款开源跨语言的RPC框架. 那么问题来了. 什么是RPC框架? RPC全称为Remote Procedure Call,意为远程过程调用. 假 ...

  4. Linux学习笔记(1)

    一.介绍 Linux系统作为服务器操作器的两大优点是其稳定性以及安全性:常见的Linux系统有以下几种: Debian(1993年下半年出的Linux分支) Ubuntu(目前互联网公司使用的比较多的 ...

  5. 基于ES6模块标准通过webpack打包HTM5项目

    本篇主要演示通过webpack打包phaser项目,webpack安装方法在此处就不一一赘述了 经常用phaser来写html5游戏的朋友可能会发现,当游戏场景比较多时,如果都写在一个js文件中那么将 ...

  6. 读书笔记 effective c++ Item 21 当你必须返回一个对象的时候,不要尝试返回引用

    1. 问题的提出:要求函数返回对象时,可以返回引用么? 一旦程序员理解了按值传递有可能存在效率问题之后(Item 20),许多人都成了十字军战士,决心清除所有隐藏的按值传递所引起的开销.对纯净的按引用 ...

  7. HttpHeplp 公共类 HttpWebRequest

    public class HttpHelp { public CookieContainer CookieContainer { get; set; } public CookieCollection ...

  8. .Net程序员学用Oracle系列(19):我知道的导出和导入

    1.传统的导出/导入工具 1.1.EXP 命令详解 1.2.IMP 命令详解 1.3.EXP/IMP 使用技巧 2.新的导出/导入工具 2.1.EXPDP/IMPDP 参数说明 2.2.EXPDP/I ...

  9. 每日java基础知识(01)

    1.java语言的主要特点. 跨平台性:一个应用可以不经过修改,就直接在不同的平台上运行. 面向对象:java是面向对象的语言,可以使用对象封装事物的属性和行为,可以使用面向对象的思想进行分析设计,并 ...

  10. Java开发之Java对数组的复制

    苏格拉底曾说过,“世界上最快乐的事,莫过于为理想而奋斗.”人生短短数十年,何不为梦想而奋斗一把?其实只要主动追求,梦想并不遥远.总有一天,你会把它攥在手里. 作为写的第一篇Java文章,展望一下开始下 ...