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

相關文章
相關標籤/搜索