日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

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

發布時間:2025/6/16 58 豆豆
生活随笔 收集整理的這篇文章主要介紹了 编程开发之--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)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。