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 ...
随机推荐
- java基础知识点---equal,==,hashcode
1.==比较对象之间的地址是否相同 student a=new student(1); student b=new student(1); a==b false b=a; a==b true ...
- DataReader的用法程序简析
// 2015/07/05 using System; using System.Collections.Generic; using System.Linq; using System.Text; ...
- Thrift入门初探--thrift安装及java入门实例
什么是thrift? 简单来说,是Facebook公布的一款开源跨语言的RPC框架. 那么问题来了. 什么是RPC框架? RPC全称为Remote Procedure Call,意为远程过程调用. 假 ...
- Linux学习笔记(1)
一.介绍 Linux系统作为服务器操作器的两大优点是其稳定性以及安全性:常见的Linux系统有以下几种: Debian(1993年下半年出的Linux分支) Ubuntu(目前互联网公司使用的比较多的 ...
- 基于ES6模块标准通过webpack打包HTM5项目
本篇主要演示通过webpack打包phaser项目,webpack安装方法在此处就不一一赘述了 经常用phaser来写html5游戏的朋友可能会发现,当游戏场景比较多时,如果都写在一个js文件中那么将 ...
- 读书笔记 effective c++ Item 21 当你必须返回一个对象的时候,不要尝试返回引用
1. 问题的提出:要求函数返回对象时,可以返回引用么? 一旦程序员理解了按值传递有可能存在效率问题之后(Item 20),许多人都成了十字军战士,决心清除所有隐藏的按值传递所引起的开销.对纯净的按引用 ...
- HttpHeplp 公共类 HttpWebRequest
public class HttpHelp { public CookieContainer CookieContainer { get; set; } public CookieCollection ...
- .Net程序员学用Oracle系列(19):我知道的导出和导入
1.传统的导出/导入工具 1.1.EXP 命令详解 1.2.IMP 命令详解 1.3.EXP/IMP 使用技巧 2.新的导出/导入工具 2.1.EXPDP/IMPDP 参数说明 2.2.EXPDP/I ...
- 每日java基础知识(01)
1.java语言的主要特点. 跨平台性:一个应用可以不经过修改,就直接在不同的平台上运行. 面向对象:java是面向对象的语言,可以使用对象封装事物的属性和行为,可以使用面向对象的思想进行分析设计,并 ...
- Java开发之Java对数组的复制
苏格拉底曾说过,“世界上最快乐的事,莫过于为理想而奋斗.”人生短短数十年,何不为梦想而奋斗一把?其实只要主动追求,梦想并不遥远.总有一天,你会把它攥在手里. 作为写的第一篇Java文章,展望一下开始下 ...