oracle存儲(chǔ)過(guò)程 與 javabean的方式 獲取信息區(qū)別在哪
老師 請(qǐng)教你個(gè)問(wèn)題:在應(yīng)用程序中調(diào)用oracle存儲(chǔ)過(guò)程,我可以在java程序中通過(guò)javabean的方式 來(lái)查詢數(shù)據(jù)庫(kù)信息啊,區(qū)別在哪?
老師 請(qǐng)教你個(gè)問(wèn)題:在應(yīng)用程序中調(diào)用oracle存儲(chǔ)過(guò)程,我可以在java程序中通過(guò)javabean的方式 來(lái)查詢數(shù)據(jù)庫(kù)信息啊,區(qū)別在哪?
2018-09-26
舉報(bào)
2018-11-16
你所說(shuō)的"javabean的方式來(lái)查詢數(shù)據(jù)庫(kù)信息"是指使用類似Hibernate這種框架嗎?
不是很清楚你具體在問(wèn)什么,但是我說(shuō)下,在java中調(diào)用存儲(chǔ)過(guò)程,和直接拼接SQL語(yǔ)句 或者用Hibernate、MyBatis的差別吧:
首先,存儲(chǔ)過(guò)程或者函數(shù),它就是一個(gè)封裝好了的方法,和java類中的“方法”,很類似(存儲(chǔ)過(guò)程類比void返回類型的方法,函數(shù)類比有返回值int、string之類的方法)。只不過(guò)它的調(diào)用方式比較特殊,就像課程中講的那樣,用JDBC的方式去使用。
其次,講下存儲(chǔ)過(guò)程的好處。實(shí)質(zhì)而言,存儲(chǔ)過(guò)程能做的事情,你自己寫SQL(查出來(lái)數(shù)據(jù),然后處理,然后update或者insert;Hibernate的話就是HQL),一樣都能做。如果是一些簡(jiǎn)單的操作,就像僅僅查幾個(gè)數(shù)據(jù),查詢結(jié)果完全相同(不可能同一條數(shù)據(jù)JDBC查是‘張三’,存儲(chǔ)過(guò)程查是‘李四’的),而且存儲(chǔ)過(guò)程反而麻煩。
但是,存儲(chǔ)過(guò)程,它是運(yùn)行在數(shù)據(jù)庫(kù)上的“方法”,你調(diào)用存儲(chǔ)過(guò)程,從頭到尾都只連接了一次數(shù)據(jù)庫(kù)。如果是一些復(fù)雜的操作,比如先查詢幾個(gè)表信息,然后進(jìn)行計(jì)算,再update或者delete幾張表的數(shù)據(jù),你用存儲(chǔ)過(guò)程封裝好,連接一次數(shù)據(jù)庫(kù)就夠了;可如果用JDBC拆成一個(gè)個(gè)SQL,或者用Hibernate,那每一個(gè)select,每一個(gè)update,每一個(gè)delete,都需要連接一次數(shù)據(jù)庫(kù)。如果你是學(xué)生,最多只需要做畢業(yè)設(shè)計(jì)之類的小程序,還沒(méi)問(wèn)題,但在實(shí)際工作過(guò)程中,頻繁的連接數(shù)據(jù)庫(kù),很耗費(fèi)資源的,并發(fā)量一高,小心你的連接數(shù)不夠用。
而且,存儲(chǔ)過(guò)程的計(jì)算,都是在數(shù)據(jù)庫(kù)服務(wù)器上,java程序只是連接了一下數(shù)據(jù)庫(kù),而沒(méi)有進(jìn)行多少計(jì)算。