1. 程式人生 > 程式設計 >Java儲存過程呼叫CallableStatement的方法

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 ch13;
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的方法的詳細內容,更多關於Java儲存過程的資料請關注我們其它相關文章!