李煥玲
摘要:存儲過程是數(shù)據(jù)庫中的一個重要對象,利用存儲過程可以提高數(shù)據(jù)庫的執(zhí)行效率,提高數(shù)據(jù)庫的安全性,并能減少網(wǎng)絡(luò)數(shù)據(jù)的傳輸。本文介紹了存儲過程的概念及分類,以及存儲過程的創(chuàng)建方法,并詳細介紹了如何利用Java程序調(diào)用數(shù)據(jù)庫存儲過程。
關(guān)鍵詞:數(shù)據(jù)庫;存儲過程;java;CallableStatement接口
分類號 TP311.13? ? ? ? 文獻標識碼:A
文章編號:1009-3044(2019)17-0014-02
開放科學(xué)(資源服務(wù))標識碼(OSID):
隨著互聯(lián)網(wǎng)+以及大數(shù)據(jù)時代的到來,如何提高數(shù)據(jù)的執(zhí)行效率已成為數(shù)據(jù)處理的主要任務(wù),存儲過程是SQL Server數(shù)據(jù)庫的重要技術(shù),它具有強大的編程功能,并且還可以提高程序的執(zhí)行效率,提高數(shù)據(jù)的安全性。
1 存儲過程概述
1.1存儲過程的概念
存儲過程(Stored Procedure)是數(shù)據(jù)庫中的一種對象,它是為了完成一個特定的任務(wù)而由SQL語句構(gòu)成的集合。存儲過程存儲在數(shù)據(jù)庫中,只需要一次編譯后即可重復(fù)使用。
1.2 存儲過程的分類
1)系統(tǒng)存儲過程
這類存儲過程是由SQL Server系統(tǒng)提供的,可進行各種數(shù)據(jù)庫的基本設(shè)計。用戶可直接使用,如:sp_renamedb可對數(shù)據(jù)庫進行更名,該類存儲過程名以sp_開頭。
2)本地存儲過程
這類存儲過程是由用戶創(chuàng)建的,該存儲過程是為了完成一個具體的功能,一般所說的存儲過程就是指本地存儲過程。
3)臨時存儲過程
這類存儲過程存放在臨時數(shù)據(jù)庫(tempdb)中,其中以#開頭的稱為本地臨時存儲過程,只有創(chuàng)建它的用戶才可以使用。另一種以##開并沒有的稱全局臨時存儲過程,該存儲過程可以被連接到數(shù)據(jù)庫服務(wù)器上的所有用戶訪問執(zhí)行。
4)遠程存儲過程
這類存儲過程是存放在遠程服務(wù)器上的存儲過程,用戶可以進行遠程訪問。
5)擴展存儲過程
這類存儲過程是用戶使用外部程序語言編寫的存儲過程,名稱一般以xp_開頭。
1.3 存儲過程的特點
1)提高運行效率
由于存儲過程在創(chuàng)建的時候,數(shù)據(jù)庫已經(jīng)對其進行了解析和優(yōu)化,以后就可以直接運行而不需要重新編譯。而普通的SQL語句每次執(zhí)行時都要進行編譯,所以使用存儲過程的執(zhí)行速度會比普通SQL語句快,從而提高數(shù)據(jù)庫的運行效率。
2)減少網(wǎng)絡(luò)傳輸
存儲過程直接在數(shù)據(jù)庫服務(wù)器上運行,數(shù)據(jù)的訪問都在數(shù)據(jù)庫服務(wù)器內(nèi)部進行,執(zhí)行結(jié)束后只需將運行結(jié)果返回給客戶端,而客戶端調(diào)用存儲過程只需要傳輸存儲過程名和相關(guān)參數(shù)即可,這就比傳輸SQL語句的數(shù)據(jù)量少,所以會減少一定的網(wǎng)絡(luò)傳輸。
3)可重復(fù)使用
存儲過程一旦創(chuàng)建好后可以重復(fù)使用,從而減少數(shù)據(jù)庫開發(fā)人員的工作量。
4)安全性高
通過向用戶授予權(quán)限,可設(shè)定只有特定用戶才具有對指定存儲過程的使用權(quán)限。
2 創(chuàng)建存儲過程
以SQL Server數(shù)據(jù)庫為例,設(shè)計定在SQL Server中已創(chuàng)建了數(shù)據(jù)庫mydb,并在該數(shù)據(jù)庫中創(chuàng)建了student表:student(sno,sname,sex,sbirth),接下來將創(chuàng)建幾種常用的存儲過程。
2.1 不帶參數(shù)的存儲過程
該類存儲過程創(chuàng)建完成后,只能完成一個具體的任務(wù),在執(zhí)行時無須用戶輸入?yún)?shù)。
例如創(chuàng)建p_xs01存儲過程,要求查詢所有學(xué)生年齡。該存儲過程返回所有學(xué)生的年齡,其代碼如下:
2.2 帶輸入?yún)?shù)的存儲過程
該類存儲過程可以擴展存儲過程的功能,可以完成一類任務(wù),在執(zhí)行時通過用戶輸入?yún)?shù),將外部信息傳遞到存儲過程中。
例如:創(chuàng)建p_xs02存儲過程,要求輸入一個學(xué)生的姓名并顯示該學(xué)生的年齡。該存儲過程有一個輸入?yún)?shù)學(xué)生姓名,并且返回該學(xué)生的年齡,其代碼如下:
2.3 帶輸入和輸出參數(shù)的存儲過程
存儲過程的參數(shù)可以是輸入也可以是輸出,通過輸入過程可以將外部信息傳遞給存儲過程,通過輸出參數(shù)可以將信息輸出到屏幕,輸出參數(shù)在使用時需使用output關(guān)鍵字聲明。
例如:創(chuàng)建p_xs03存儲過程,要求輸入一個學(xué)生的姓名,并且輸出該學(xué)生的年齡。該存儲過程有一個輸入?yún)?shù)學(xué)生姓名,一個輸出參數(shù)年齡,其代碼如下:
3 Java調(diào)用存儲過程
3)創(chuàng)建數(shù)據(jù)庫連接對象。
3.1調(diào)用不帶參數(shù)的存儲過程
其中,c是數(shù)據(jù)庫連接對象,通過調(diào)用p_xs02存儲過程,可將王美的年齡輸出。
3.3 調(diào)用帶輸入和輸出參數(shù)的存儲過程
4 總結(jié)
在Java程序設(shè)計中,數(shù)據(jù)訪問是非常重要的,只有通過調(diào)用數(shù)據(jù)庫中的存儲過程,才能提高數(shù)據(jù)庫的執(zhí)行效率,減少網(wǎng)絡(luò)傳輸,使得SQL語句更加安全,所以掌握存儲過程對數(shù)據(jù)庫操作是非常重要的。
參考文獻:
[1] 齊文娟. 對SQL Server存儲過程的研究與應(yīng)用[J].廊坊師范學(xué)院學(xué)報:自然科學(xué)版,2010(8).
[2] 郝愛語. 通過存儲過程更新數(shù)據(jù)為技術(shù)的探究與實現(xiàn)[J].軟件導(dǎo)刊,2010(10).
[3] 陳雅.SQL Server數(shù)據(jù)庫存儲過程應(yīng)用研究[J].中國科技信息,2017(5).
[4] 張梅梅.SQL Server 2008中的存儲過程的研究及應(yīng)用[J].中國市場,2016(6).
[5] 韓翔宇.數(shù)據(jù)庫存儲過程的探討及應(yīng)用[J].信息系統(tǒng)工程,2015(12).
[6] 陳瀟.SQL Server2008數(shù)據(jù)庫存儲過程的應(yīng)用[J].軟件工程師,2015(6).
[7] 調(diào)用存儲過程.https://blog.csdn.net/aigochina/article/details/7956936
[8] 百度百科.https://baike.baidu.com/
【通聯(lián)編輯:王力】