欢迎访问 生活随笔!

生活随笔

当前位置: 首页 > 运维知识 > 数据库 >内容正文

数据库

编程开发之--Oracle数据库--存储过程和存储函数(2)

发布时间:2025/6/16 数据库 25 豆豆
生活随笔 收集整理的这篇文章主要介绍了 编程开发之--Oracle数据库--存储过程和存储函数(2) 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

上一小结我们简单介绍了存储过程和存储函数,对存储过程和存储函数有了一个基本的了解,接下来介绍在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)*/@Testpublic void testProcedure() {//{call <procedure-name>[(<arg1>,<arg2>,...)]}String sql="{call queryempinform(?,?,?,?)}";Connection conn=null;CallableStatement call=null;try {//得到一个连接conn=JDBCUtils.getConnection();//通过连接创建出statmentcall=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*/@Testpublic void testFunction() {//{?=call <procedure-name>[(<arg1>,<arg2>,...)]}String sql="{?=call queryempincome(?)}";Connection conn=null;CallableStatement call=null;try {//得到数据库连接conn=JDBCUtils.getConnection();//基于连接得到statmentcall=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

总结

以上是生活随笔为你收集整理的编程开发之--Oracle数据库--存储过程和存储函数(2)的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。