在資料訪問層對資料庫進行操作的設計上,主要有這麼幾種:拼接字串,帶構造引數的基本sql語句,儲存過程,檢視等。 因為這次做系統主要是為了促進我們學習,所以在本次機房收費系統中,我分別嘗試了這幾種方式。
舉幾個例子:
a、根據條件查詢上下機記錄時,採用帶引數的sql語句,以上下機記錄表,學生資訊表,上機卡資訊表為基表進行聯合查詢。
b、在新增結賬資訊,查詢充值記錄和卡內餘額等時採用的是帶輸入引數或輸出引數的儲存過程。在建立儲存過程時,還嘗試採用了控制語句和內建函式,尤其是新增結賬資訊時。
c、查詢學生基本資訊的時候,牽扯到了檢視的方式,採用了拼接字元創的形式去查詢由上機卡和學生資訊表為基表建立的檢視。
下面,根據我在採用這幾種方式時的體會,比較他們各自的優缺點:
1、採用拼接字串是肯定不可取的,雖然可以可以根據需要隨時在客戶端自定義sql語句,但這樣很危險,例如sql語句注入漏洞問題。
2、採用建構函式基本sql語句應對簡單的查詢還可以,也比較安全,如果是比較複雜的查詢,會把人逼瘋的(例如聯合查詢7,8張表)
舉個例子:
這是我在查詢上下機記錄時用到的一段帶引數的sql語句,這裡牽扯到三張表,採用內連線。
selectoor_cardid,stu_stuname,stu_department,stu_grade,oor_ondate,oor_ontime,oor_computer
fromtb_onoffrecord inner join tb_cardinfo
on oor_cardid=cif_cardid and oor_cardid=@cardid and cif_state=@cardstate and oor_offdate is null and oor_state=@cardstate
inner jointb_studentinfo on cif_stuid=stu_pk_stuid
因為資料庫考慮到聯合查詢,所以欄位前加了字首,如果沒有字首,那麼一些字段,例如cardid前還要加上表名,那就更複雜了。(這也體現了字段字首的好處)
3、檢視和基本sql語句的直接區別在於:sql語句多一道網路傳輸,而檢視是直接執行資料庫的檢視。儲存過程也是這樣,儲存過程為什麼快也有這個原因,也就是說檢視和儲存過程只需要傳輸乙個名稱即可,而sql語句可能要傳輸大量的字串,檢視和儲存過程顯然會增加伺服器資料庫負擔。
4、儲存過程和檢視的區別,主要體現在檢視是視覺化的聯合查詢,而儲存過程不是,只不過檢視更直觀,而且你可以像查詢表一樣去查詢檢視,而不用考慮那些什麼左連線右連線之類的語句。對於非常複雜的鏈結表來說(如果七八個表連在一起,還不是簡單的單鏈),你寫sql語句會把大腦逼瘋的,用檢視就可以大大減輕工作難度。
用另一種方式來表達,檢視和儲存過程降低了應用程式和物理表的耦合。儲存過程是字串敘述的,而檢視更加直觀,要達到的效果有一定相似度。
採用哪種方法要看具體的程式應用場景了,顯然直接拼接字串是不可取的,如果考慮執行效率而不考慮伺服器資料庫壓力,用檢視和儲存過程的辦法返回datatable很簡單,如果專案比較小,客戶端的資源隨便用.可以直接使用構造引數的基本sql語句,牽扯到幾張表時,在客戶端獲取資料後,從多個返回的datatable中取出資料,用**生成乙個新datatablee返回也不錯。具體問題還要具體分析,把握平衡。
解析資料訪問層運算元據庫的方式
在資料訪問層對資料庫進行操作的設計上,主要有這麼幾種 拼接字串,帶構造引數的基本sql語句,儲存過程,檢視等。因為這次做系統主要是為了促進我們學習,所以在本次機房收費系統中,我分別嘗試了這幾種方式。舉幾個例子 a 根據條件查詢上下機記錄時,採用帶引數的sql語句,以上下機記錄表,學生資訊表,上機卡資...
ADO方式運算元據庫
ado連線sql server的方式已經在前文mfc使用ado連線sql server 中進行過描述,接下來主要講講如何運算元據庫。recordsetptr智慧型指標,它是專門為通過記錄集運算元據庫而設立的指標,通過該介面可以對資料庫的表內的記錄 欄位等進行各種操作。通過 recordsetptr例...
JDBC方式運算元據庫
1.讀取配置檔案,我將配置資訊寫入配置檔案 properties 中,方便後期資料庫變更後或者其他專案使用,擴充套件性好些,盡量避免硬編碼.driver oracle.jdbc.driver.oracledriver url jdbc oracle thin 127.0.0.1 1521 orcl ...