本人開發的開發者技術變現資源彙集地,你們支持下,下面是網址java
https://www.baiydu.comandroid
這個數據訪問的功能,我在.NET+Mysql .NET+Sqlserver PHP+Mysql上都實現過,而且都發布在了我博客園裏面,由於我以爲這個功能實在是過重要,會讓你少寫不少SQL語句不說,還能提升程序的執行效率, 今天在JAVA+Mysql上也實現了這個功能下面我貼出代碼,此次我會講詳細點,讓看的朋友能更加清楚它的好處在哪裏。sql
1、封裝的代碼存儲過過程調用方法數據庫
關於返回類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; }
2、調用方法的代碼網絡
/*調用帶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(); }
三:存儲過程spa
這裏我詳細說下:這個調用的存儲過程執行的步驟很簡單,就是傳入一個名稱,而後判斷數據庫中是否有相同名稱的人員,若是有code
就返回2(不插入),若是沒就返回1(表示咱們以hellow爲名稱給數據庫中增長了一條數據),這個步驟若是
是直接寫SQL語句是必須寫兩條的,可是這裏用到了存儲過程,就只須要如此簡單一步就處理了...,也許你以爲我這個例子舉得不正確,
也許你還會想,咱們能夠將這個名稱字段設置個主鍵啊,不就一個SQL語句就好了嗎,呵呵 不過我這裏說了,我只是舉了這麼一
簡單的例子,SQL操做複雜邏輯的地方太多了。。...也許連帶操做的有10步若是你寫SQL語句就須要10次訪問數據,那麼這時候
你再來看這個例子。你會以爲是多麼的讓你愉快.server
下面貼存儲過程的圖:htm
三:執行效果
第一次調用存儲過程截圖
第二次調用存儲過程截圖
本人創業作的一款androidApp, 下載量已經有2000多萬,各類當前熱門的網絡手機獎勵紅包所有集成,另外還有熱門電影和淘寶高額優惠券!很適合各種型的用戶。