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