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