下面是我学到了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 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(" "+"其他员工信息如下:"); 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 }
二、创建一个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 }
三、在写一个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