java Servlet+mysql 調用帶有輸入參數和返回值的存儲過程(原創)


本人開發的開發者技術變現資源聚集地,大家支持下,下面是網址

https://www.baiydu.com

 

 

這個數據訪問的功能,我在.NET+Mysql .NET+Sqlserver  PHP+Mysql上都實現過,並且都發布在了我博客園里面,因為我覺得這個功能實在是太重要,會讓你少寫很多SQL語句不說,還能提高程序的執行效率, 今天在JAVA+Mysql上也實現了這個功能下面我貼出代碼,這次我會講詳細點,讓看的朋友能更加清楚它的好處在哪里。

 

一、封裝的代碼存儲過過程調用方法

  關於返回類CallableStatement的解釋: CallableStatement 對象為所有的DBMS 提供了一種以標准形式調用已儲存過程的方法。已儲存過程儲存在數據庫中。對已儲存過程的調用是 CallableStatement對象所含的內容。這種調用是 用一種換碼語法來寫的,有兩種形式:一種形式帶結果參,另一種形式不帶結果參數。結果參數是 一種輸出 (OUT) 參數,是已儲存過程的返回值。兩種形式都可帶有數量可變的輸入(IN 參數)、 輸出(OUT 參數)或輸入和輸出(INOUT 參數)的參數。問號將用作參數的占位符

 

  // 調用帶有輸入參數且有返回值的存儲過程
    public static CallableStatement callProcInputAndOutPut(String sql, String[] inparameters) {
        try {
            conn = getConnection();
            cs = conn.prepareCall(sql);
            if(inparameters!=null)
                for(int i=0;i<inparameters.length;i++)
                {
                    //if中循環的參數是我們,在存儲過程需要使用到的參數
                     if (i<inparameters.length-1) {
                         cs.setObject(i+1, inparameters[i]);  
                    }
                     //else中的參數是我們存儲過程執行完畢后返回給我們的值,它會被保存在CallableStatement這個類里面,
                     //然后我們可以根據傳入參數時所在的位置,這個位置就是傳入的數組參下標+1去取存儲過程返回給我們的值
                     else {
                         cs.registerOutParameter(2, java.sql.Types.VARCHAR);
                         
                    }
                     
                }
                   
            cs.execute();
        }
        catch (Exception e) {
            e.printStackTrace();
            throw new RuntimeException(e.getMessage());
        }finally{
           
        }
        return cs;
    }

 

二、調用方法的代碼

 /*調用帶output參數的存儲過程*/
            //下面就是我們組合的參數,其中第一個是存儲過程所需參數,第二個""沒有賦值的參數就對應存儲過程中的輸出參數,就是我們需要的返回值
             String[] sqlParameter=new String[]{"hellow",""};
             //調用存儲過程的的字符串
            String  executString="call outputProcudure(?,?)";
            //調用存儲過程的的字符串  outPutProcudure就是我們的存儲過程名稱,然后兩個?表示兩個參數,1是我們參數的參數,第二是我們存儲過程處理完后返回的值
            CallableStatement  proReturnData=MySqlHepler.callProcInputAndOutPut(executString, sqlParameter);
            try {
                 //取值 由於帶OUT參數的返回值在我們存儲過程中參數的位置是第二位所以我們 使用GETINT(2),接着我會貼存儲過程
                int returnValue= proReturnData.getInt(2);
                if (returnValue==1) {
                     String groupAlertString="返回值是:"+returnValue+"--->插入成功.";
                     out.println(groupAlertString);
                }
                else 
                {
                 String groupAlertString="返回值是:"+returnValue+"--->插入失敗,該用戶名已經存在.";
                    out.println(groupAlertString);
                }
                 
            } catch (SQLException e) {
             
                e.printStackTrace();
            }

 

三:存儲過程

 這里我詳細說下:這個調用的存儲過程執行的步驟很簡單,就是傳入一個名稱,然后判斷數據庫中是否有相同名稱的人員,如果有

就返回2(不插入),如果沒就返回1(表示我們以hellow為名稱給數據庫中增加了一條數據),這個步驟如果
是直接寫SQL語句是必須寫兩條的,但是這里用到了存儲過程,就只需要如此簡單一步就處理了...,也許你覺得我這個例子舉得不正確,
也許你還會想,我們可以將這個名稱字段設置個主鍵啊,不就一個SQL語句就行了嗎,呵呵 不過我這里說了,我只是舉了這么一
簡單的例子,SQL操作復雜邏輯的地方太多了。。...也許連帶操作的有10步如果你寫SQL語句就需要10次訪問數據,那么這時候
你再來看這個例子。你會覺得是多么的讓你愉快.

下面貼存儲過程的圖:

 

三:執行效果

  第一次調用存儲過程截圖

第二次調用存儲過程截圖

  

 

 

 本人創業做的一款androidApp, 下載量已經有2000多萬,各種當前熱門的網絡手機獎勵紅包全部集成,另外還有熱門電影和淘寶高額優惠券!很適合各類型的用戶。

 

  

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM