博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
编程开发之--Oracle数据库--存储过程和存储函数(2)
阅读量:6639 次
发布时间:2019-06-25

本文共 3833 字,大约阅读时间需要 12 分钟。

上一小结我们简单介绍了存储过程和存储函数,对存储过程和存储函数有了一个基本的了解,接下来介绍在java程序中如何调用我们创建的存储过程和存储函数

1、在应用程序中调用我们的存储过程

      创建一个简单的Java工程,如:TestOracle,在项目中新建lib文件夹,并拷贝ojdbc14.jar,添加到系统路径中,目录结构如下:

      在项目中创建一个用于连接数据库以及与数据库执行交流的工具类JDBCUtils.java

package demo.utils;import java.sql.Connection;import java.sql.DriverManager;import java.sql.ResultSet;import java.sql.Statement;public class JDBCUtils {	private static String driver="oracle.jdbc.OracleDriver";	private static String url="jdbc:oracle:thin:@localhost:1521:orcl";	private static String user="scott";	private static String password="scott";		//注册数据库驱动	static {		try {			Class.forName(driver);//			DriverManager.registerDriver(driver);		} catch (Exception e) {			throw new ExceptionInInitializerError(e);		}	}		//获取数据库连接	public static Connection getConnection() {		try {			return DriverManager.getConnection(url, user, password);		} catch (Exception e) {			e.printStackTrace();		}		return null;	}	//释放数据库资源	public static void release(Connection conn,Statement st,ResultSet rs) {		if(rs!=null) {			try {				rs.close();			} catch (Exception e) {				e.printStackTrace();			}finally {				rs=null;			}		}				if(st!=null) {			try {				st.close();			} catch (Exception e) {				e.printStackTrace();			}finally {				st=null;			}		}				if(conn!=null) {			try {				conn.close();			} catch (Exception e) {				e.printStackTrace();			}finally {				conn=null;			}		}	}}

  创建我们的测试包,在包中创建我们的测试类TestProcedure.java

package demo.oracle;import java.sql.CallableStatement;import java.sql.Connection;import org.junit.Test;import demo.utils.JDBCUtils;import oracle.jdbc.internal.OracleTypes;public class TestProcedure {	/**	 * create or replace PROCEDURE queryempinform(eno in number,		                                          pename out varchar2,		                                          psal out number,		                                          pjob out varchar2)*/	@Test	public void testProcedure() {		//{call 
[(
,
,...)]} String sql="{call queryempinform(?,?,?,?)}"; Connection conn=null; CallableStatement call=null; try { //得到一个连接 conn=JDBCUtils.getConnection(); //通过连接创建出statment call=conn.prepareCall(sql); //对in参数进行赋值 call.setInt(1, 7839); //对out参数进行申明 call.registerOutParameter(2, OracleTypes.VARCHAR); call.registerOutParameter(3, OracleTypes.NUMBER); call.registerOutParameter(4, OracleTypes.VARCHAR); //设置文笔之后,开始我们的存储过程的调用 call.execute(); //取出结果 String name=call.getString(2); double sal=call.getDouble(3); String job=call.getString(4); System.out.println(name+"\t"+sal+"\t"+job); } catch (Exception e) { //遇到异常将其打印到控制台输出 e.printStackTrace(); }finally { //释放数据库资源 JDBCUtils.release(conn, call, null); } }}

  启动我们的单元测试,运行结果:

 

2、在应用程序中调用我们的存储函数

     在测试包中创建我们的测试类TestFunction.java

package demo.oracle;import java.sql.CallableStatement;import java.sql.Connection;import org.junit.Test;import demo.utils.JDBCUtils;import oracle.jdbc.internal.OracleTypes;public class TestFunction {	/**	 * create or replace FUNCTION queryempincome(eno in number)       return number     */	@Test	public void testFunction() {		//{?=call 
[(
,
,...)]} String sql="{?=call queryempincome(?)}"; Connection conn=null; CallableStatement call=null; try { //得到数据库连接 conn=JDBCUtils.getConnection(); //基于连接得到statment call=conn.prepareCall(sql); //对in参数赋值 call.setInt(2, 7839); //对out参数进行申明 call.registerOutParameter(1, OracleTypes.NUMBER); //执行我们存储函数的调用 call.execute(); //取得我们的结果 double income=call.getDouble(1); System.out.println("该员工的年收入是:"+income); } catch (Exception e) { e.printStackTrace(); }finally { JDBCUtils.release(conn, call, null); } }}

  启动我们的单元测试,运行结果:

 

转载于:https://www.cnblogs.com/ZeroMZ/p/9196836.html

你可能感兴趣的文章
深入理解jQuery中live与bind方法的区别
查看>>
推荐一款不错的jquery时间控件(强大的处理事务性)
查看>>
不同系统下的回车\r和换行\n,及其历史
查看>>
Spring boot + io.springfox Swagger2 统一添加header 参数的方法:globalOperationParameters
查看>>
Java 复习 —— 一张图读懂多线程
查看>>
postgresql备份恢复之pg_dump大数据处理
查看>>
百万级数据下的mysql深度解析
查看>>
package-info.java——简介
查看>>
JavaScript 在数组指定位置插入元素
查看>>
URL匹配设计考
查看>>
使用hugo制作基于md文档的静态网站
查看>>
第四章-java多线程核心技术-Lock锁-第一篇
查看>>
运维监控工具选择
查看>>
HttpClient基本用法
查看>>
浮点数的负零
查看>>
欧莱雅官方网站
查看>>
Android--补间动画
查看>>
php函数之fgetcsv
查看>>
带你走进java集合之ConcurrentHashMap
查看>>
如何使用虚拟机模板
查看>>