sql函式設計:
一開始本來是直接用Java的jdbc直接傳輸操作陳述句的,但后來學了存盤程序發現存盤程序可以提高不少的效率,就重構了自己對資料庫的操作代碼,包括:開啟,查找,修改,關閉,
開啟:直接使用的建構式,以后使用的時候可以直接把物件new成一個static的變數,可以一直使用,直到使用關閉函式,
具體操作(查(find),寫(write),改(change)):撰寫的思路是現在mysql資料庫里面實作函式和存盤程序,
巨坑提示1,存盤程序和函式的區別是,函式必須回傳一個資料,return陳述句必須寫,而存盤程序可以回傳,也可以不回傳這個資料,
一開始我使用的是存盤程序,實作find,但是,有個巨坑的東西(mysql的設計缺陷,那就是IN的變數,即存盤程序名旁邊的引數,不可以直接表示欄位,巨坑,還要深入學習動態的sql才可以表示欄位),然后我就多寫了幾個函式,每個函式實作不同欄位的查詢,比如,findbyemail函式就是通過where email(email是欄位)=引數;實作查找,
然后為了讓功能齊全,就設計了多個函式,比如findbyname,findbyphone這些函式存在資料庫里,然后資料庫編譯好,等著Java直接呼叫(這里比較方便的就是我們的呼叫直接用的是呼叫陳述句 "{call 函式名(?)}",這里的?問號,是指的你的引數,也意味著你的存盤程序或者函式有多少引數就必須用多少個問號,然后發送給資料庫,性能提高不少)

巨坑提示2,在發送呼叫存盤程序的sql陳述句的程序中,有可能會出現引號(')決議錯位的尷尬錯誤,而且我還沒辦法糾正,比如writeuser存盤程序,發送過去的陳述句被決議錯了,就是引號錯位,卡了我一上午的時間,然后就使用的函式,放棄使用存盤程序,性能影響比較小,還可以回傳一個資料可以判斷一下,比如我的writeuser函式,我可以這樣寫,就不會出現這樣尷尬的錯誤了
string sql = “{?=call writeuser(?????)}”;
1 public String WriteUser(String name,String phone,String email,String pwd,String status) throws SQLException { 2 //使用方法:比如寫入用戶資料name,phone,email,pwd,status,我們可以這樣寫write('張三','110','[email protected]','999','1') 3 4 String sql = "{? = call writeuser(?,?,?,?,?)}"; 5 6 CallableStatement cs = connection.prepareCall(sql); 7 8 cs.registerOutParameter(1,Types.CHAR);//這里實在規定你函式里面回傳的資料型別 9 10 cs.setString(2,name);//以下都是在向問號里面傳遞引數 11 12 cs.setString(3,phone); 13 14 cs.setString(4,email); 15 16 cs.setString(5,pwd); 17 18 cs.setString(6,status); 19 20 cs.execute(); 21 22 String value = https://www.cnblogs.com/eyeofbajie/p/cs.getString(1); 23 if (valuehttps://www.cnblogs.com/eyeofbajie/p/=="1"){ 24 cs.close(); 25 return "ok"; 26 } 27 cs.close(); 28 return "no"; 29 }
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/101370.html
標籤:MySQL
下一篇:MySQL 學習筆記 (一)
