JDBC调用存储过程的例子

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

废话就不啰嗦,如今就直接上机代码。java

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

若是你的Oracle里没有 emp默认的员工表,须要建立相似如下的 emp表。数据库

 

在PL/SQL中须要写如下的调用存储过程的代码:oracle

 

 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。建立好后相似以下这样:eclipse

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

 

1、建立一个JdbcUtil底层类用来链接数据库,代码以下:post

 

 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             
45             String ename = cstmt.getString(2);
46             String job = cstmt.getString(3);
47             ResultSet rs = (ResultSet) cstmt.getObject(4);
48 
49             //简单测验一下在控制台输出
50             System.out.println("员工编号:"+myempno);
51             System.out.println(ename+"的工做是:" + job);
52             System.out.println("\n"+"其余员工信息以下:");
53             //遍历输出其余员工信息
54             while(rs.next()){
55                 System.out.println(    rs.getString("ename") +"的工做是:"+ rs.getString("job"));
56             }
57             rs.close();
58             cstmt.close();
59             conn.close();
60             return job;
61         } catch (SQLException e) {
62             // TODO Auto-generated catch block
63             System.out.println("执行过程当中异常:"+e.getMessage());
64         }
65         
66         return "";
67     }
68 }

 

2、建立一个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     
26     protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
27         // TODO Auto-generated method stub
28         int empno = Integer.parseInt( request.getParameter("empno") );
29         JdbcUtil ju = new JdbcUtil();
30         ju.findEmpJob(empno);
31     }
32 
33     
34     protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
35         // TODO Auto-generated method stub
36         doGet(request, response);
37     }
38 
39 }

 

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

 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

相关文章
相关标签/搜索