Java調用Oracle數據庫的存儲過程-入門基礎

1 環境準備

開發平臺:

win10 pro+jdk1.8+idea2019.3+oracle 10g(xp虛擬機)+maven3.5.3

搭建環境:

  1. 新建一個maven工程,項目類型直接選擇JavaSE。

  2. 編寫pom文件,填寫下面的座標。

     <dependencies>
            <dependency>
                <groupId>junit</groupId>
                <artifactId>junit</artifactId>
                <version>4.12</version>
                <scope>test</scope>
            </dependency>
            <dependency>
                <groupId>com.oracle</groupId>
                <artifactId>ojdbc14</artifactId>
                <version>10.2.0.1.0</version>
            </dependency>
        </dependencies>
    

    注意:ojdbc14如果無法直接識別和下載,需要將ojdbc14的jar包安裝到本地倉庫。
    步驟如下:

    2.1 將下載的ojdbc14.jar解壓

    在這裏插入圖片描述

    2.2 在解壓後的文件夾\ojdbc14\META-INF中找到MANIFEST.MF文件,用文本編輯器打開,並記住圖中的版本號

    [外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-cUXwoj1g-1592755434823)(Untitled.assets/image-20200621234143337.png)]

    2.3 在ojdbc所在的jar包目錄下打開命令行,並運行以下命令(注意,版本需要修改爲上一步得到的版本號):

    mvn install:install-file -DgroupId=com.oracle -DartifactId=ojdbc14 -Dversion=10.2.0.1.0 -Dpackaging=jar -Dfile=ojdbc14.jar
    

    控制檯出現BUILD SUCCESS就成功安裝jar包了!

2 環境測試

新建測試類,並編寫方法:

 /**
     * 測試連接數據庫,查詢數據
     * @throws Exception
     */
    @Test
    public void javaCallOracle() throws Exception {
        //註冊數據庫驅動
        Class.forName("oracle.jdbc.driver.OracleDriver");
        //獲取連接
        Connection conn = DriverManager.getConnection("jdbc:oracle:thin:@192.168.254.10:1521:orcl", "cncs", "cncs");
        //獲取預處理對象
        PreparedStatement pstm = conn.prepareStatement("select * from emp where empno = ?");
        //給參數賦值
        pstm.setInt(1, 7788);
        //執行數據庫查詢操作,並獲取結果集
        ResultSet resultSet = pstm.executeQuery();
        //遍歷結果
        while(resultSet.next()){
            System.out.println(resultSet.getString("ename"));
        }
        //釋放資源
        resultSet.close();
        pstm.close();
        conn.close();
    }

測試成功,進入下一步,如果測試不對,先檢查有沒有導入ojdbc14的座標。

3 調用存儲過程

打開JDK-API,搜索CallableStatement,找到轉義語法的格式:

//存儲函數書寫格式
{?= call <procedure-name>[(<arg1>,<arg2>, ...)]}
//存儲過程書寫格式
{call <procedure-name>[(<arg1>,<arg2>, ...)]}

編寫調用存儲過程的函數:

    /**
     * 測試調用存儲過程
     *  {call <procedure-name>[(<arg1>,<arg2>, ...)]}
     */
    @Test
    public void javaCallProceduce() throws Exception{
        //註冊數據庫驅動
        Class.forName("oracle.jdbc.driver.OracleDriver");
        //獲取連接
        Connection conn = DriverManager.getConnection("jdbc:oracle:thin:@192.168.254.10:1521:orcl", "cncs", "cncs");
        //獲取預處理對象
        CallableStatement cs = conn.prepareCall("{call p_yearsal(?,?)}");
        //給參數賦值
        cs.setInt(1, 7788);
        cs.registerOutParameter(2, OracleTypes.NUMBER);
        //執行存儲過程
        cs.execute();
        System.out.println(cs.getObject(2));
    }

4 調用存儲函數

編寫調用存儲函數的函數:

    /**
     * 測試調用存儲函數
     * {?= call <procedure-name>[(<arg1>,<arg2>, ...)]}
     *
     */
    @Test
    public void javaCallFunction() throws Exception{
        //註冊數據庫驅動
        Class.forName("oracle.jdbc.driver.OracleDriver");
        //獲取連接
        Connection conn = DriverManager.getConnection("jdbc:oracle:thin:@192.168.254.10:1521:orcl", "cncs", "cncs");
        //獲取預處理對象
        CallableStatement cs = conn.prepareCall("{? = call f_yearsal(?)}");
        //給參數賦值
        cs.setInt(2, 7499);
        cs.registerOutParameter(1, OracleTypes.NUMBER);
        //執行存儲過程
        cs.execute();
        System.out.println(cs.getObject(1));
    }
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章