您好,登錄后才能下訂單哦!
這篇文章將為大家詳細講解有關Java項目中如何在存儲過程中調用CallableStatement,文章內容質量較高,因此小編分享給大家做個參考,希望大家閱讀完這篇文章后對相關知識有一定的了解。
什么是存儲過程?
一個存儲過程是一個可編程的函數,它在數據庫中創建并保存。它可以有SQL語句和一些特殊的控制結構組成。當希望在不同的應用程序或平臺上執行相同的函數,或者封裝特定功能時,存儲過程是非常有用的。數據庫中的存儲過程可以看做是對編程中面向對象方法的模擬。它允許控制數據的訪問方式。
存儲過程的優點:
(1).存儲過程增強了SQL語言的功能和靈活性。存儲過程可以用流控制語句編寫,有很強的靈活性,可以完成復雜的判斷和較復雜的運算。
(2).存儲過程允許標準組件是編程。存儲過程被創建后,可以在程序中被多次調用,而不必重新編寫該存儲過程的SQL語句。而且數據庫專業人員可以隨時對存儲過程進行修改,對應用程序源代碼毫無影響。
(3).存儲過程能實現較快的執行速度。如果某一操作包含大量的Transaction-SQL代碼或分別被多次執行,那么存儲過程要比批處理的執行速度快很多。因為存儲過程是預編譯的。在首次運行一個存儲過程時查詢,優化器對其進行分析優化,并且給出最終被存儲在系統表中的執行計劃。而批處理的Transaction-SQL語句在每次運行時都要進行編譯和優化,速度相對要慢一些。
(4).存儲過程能過減少網絡流量。針對同一個數據庫對象的操作(如查詢、修改),如果這一操作所涉及的Transaction-SQL語句被組織程存儲過程,那么當在客戶計算機上調用該存儲過程時,網絡中傳送的只是該調用語句,從而大大增加了網絡流量并降低了網絡負載。
(5).存儲過程可被作為一種安全機制來充分利用。系統管理員通過執行某一存儲過程的權限進行限制,能夠實現對相應的數據的訪問權限的限制,避免了非授權用戶對數據的訪問,保證了數據的安全。
簡單案例,創建于調用
drop procedure if exists pr_add; -- 計算兩個數之和 create procedure pr_add ( a int, b int ) begin declare c int; if a is null then set a = 0; end if; if b is null then set b = 0; end if; set c = a + b; select c as sum; /*return c;- 不能在 MySQL 存儲過程中使用。return 只能出現在函數中。*/ end; set @a = 10; set @b = 20; call pr_add(@a, @b);
Java 案例
1.存儲過程
CREATE PROCEDURE add_pro(a int,b int,out sum int) BEGIN set sum = a + b; END;
2.調用
package ch23; import java.sql.*; /** * Created by Jiqing on 2016/12/20. */ public class ConnMySql { public static void main(String[] args) throws Exception { // 1.加載驅動 Class.forName("com.mysql.jdbc.Driver"); // try() {} 語法中小括號中的資源會自動回收 try ( // 2.連接數據庫 Connection conn = DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/tpshop","root","123456"); CallableStatement cstmt = conn.prepareCall("{call add_pro(?,?,?)}") ) { cstmt.setInt(1,4); cstmt.setInt(2,5); cstmt.registerOutParameter(3,Types.INTEGER); cstmt.execute(); System.out.println("執行結果是:"+cstmt.getInt(3)); } } }
執行結果是:9
關于Java項目中如何在存儲過程中調用CallableStatement就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。