freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

java學(xué)習(xí)必備總結(jié)-資料下載頁(yè)

2024-10-20 20:29本頁(yè)面
  

【正文】 。JavaSoft目前作為非正式代理負(fù)責(zé)注冊(cè)JDBC子協(xié)議名稱。要注冊(cè)某個(gè)子協(xié)議名稱,請(qǐng)發(fā)送電子郵件到下述地址:jdbc@。連接一旦建立,就可用來向它所涉及的數(shù)據(jù)庫(kù)傳送SQL語(yǔ)句。JDBC對(duì)可被發(fā)送的SQL語(yǔ)句類型不加任何限制。這就提供了很大的靈活性,即允許使用特定的數(shù)據(jù)庫(kù)語(yǔ)句或甚至于非SQL語(yǔ)句。然而,它要求用戶自己負(fù)責(zé)確保所涉及的數(shù)據(jù)庫(kù)可以處理所發(fā)送的SQL語(yǔ)句,否則將自食其果。例如,如果某個(gè)應(yīng)用程序試圖向不支持儲(chǔ)存程序的DBMS發(fā)送儲(chǔ)存程序調(diào)用,就會(huì)失敗并將拋出異常。JDBC要求驅(qū)動(dòng)程序應(yīng)至少能提供ANSI SQL2 Entry Level功能才可算是符合JDBC標(biāo)準(zhǔn)TM的。這意味著用戶至少可信賴這一標(biāo)準(zhǔn)級(jí)別的功能。JDBC提供了三個(gè)類,用于向數(shù)據(jù)庫(kù)發(fā)送SQL語(yǔ)句。Connection接口中的三個(gè)方法可用于創(chuàng)建這些類的實(shí)例。下面列出這些類及其創(chuàng)建方法:(1)Statement:由方法createStatement所創(chuàng)建。Statement對(duì)象用于發(fā)送簡(jiǎn)單的SQL語(yǔ)句。(2)PreparedStatement:由方法prepareStatement所創(chuàng)建。PreparedStatement對(duì)象用于發(fā)送帶有一個(gè)或多個(gè)輸入?yún)?shù)(IN參數(shù))的SQL語(yǔ)句。PreparedStatement擁有一組方法,用于設(shè)置IN參數(shù)的值。執(zhí)行語(yǔ)句時(shí),這些IN參數(shù)將被送到數(shù)據(jù)庫(kù)中。PreparedStatement的實(shí)例擴(kuò)展了Statement,因此它們都包括了Statement的方法。PreparedStatement對(duì)象有可能比Statement對(duì)象的效率更高,因?yàn)樗驯活A(yù)編譯過并存放在那以供將來使用。(3)CallableStatement:由方法prepareCall所創(chuàng)建。CallableStatement對(duì)象用于執(zhí)行SQL儲(chǔ)存程序─一組可通過名稱來調(diào)用(就象函數(shù)的調(diào)用那樣)的SQL語(yǔ)句。CallableStatement對(duì)象從PreparedStatement中繼承了用于處理IN參數(shù)的方法,而且還增加了用于處理OUT參數(shù)和INOUT參數(shù)的方法。不過通常來說createStatement方法用于簡(jiǎn)單的SQL語(yǔ)句(不帶參數(shù))、prepareStatement方法用于帶一個(gè)或多個(gè)IN參數(shù)的SQL語(yǔ)句或經(jīng)常被執(zhí)行的簡(jiǎn)單SQL語(yǔ)句,而prepareCall方法用于調(diào)用已儲(chǔ)存過程。事務(wù)由一個(gè)或多個(gè)這樣的語(yǔ)句組成:這些語(yǔ)句已被執(zhí)行、完成并被提交或還原。當(dāng)調(diào)用方法mit或rollback時(shí),當(dāng)前事務(wù)即告就結(jié)束,另一個(gè)事務(wù)隨即開始。缺省情況下,新連接將處于自動(dòng)提交模式。也就是說,當(dāng)執(zhí)行完語(yǔ)句后,將自動(dòng)對(duì)那個(gè)語(yǔ)句調(diào)用mit方法。這種情況下,由于每個(gè)語(yǔ)句都是被單獨(dú)提交的,因此一個(gè)事務(wù)只由一個(gè)語(yǔ)句組成。如果禁用自動(dòng)提交模式,事務(wù)將要等到mit或rollback方法被顯式調(diào)用時(shí)才結(jié)束,因此它將包括上一次調(diào)用mit或rollback方法以來所有執(zhí)行過的語(yǔ)句。對(duì)于第二種情況,事務(wù)中的所有語(yǔ)句將作為組來提交或還原。方法mit使SQL語(yǔ)句對(duì)數(shù)據(jù)庫(kù)所做的任何更改成為永久性的,它還將釋放事務(wù)持有的全部鎖。而方法rollback將棄去那些更改。有時(shí)用戶在另一個(gè)更改生效前不想讓此更改生效。這可通過禁用自動(dòng)提交并將兩個(gè)更新組合在一個(gè)事務(wù)中來達(dá)到。如果兩個(gè)更新都是成功,則調(diào)用mit方法,從而使兩個(gè)更新結(jié)果成為永久性的;如果其中之一或兩個(gè)更新都失敗了,則調(diào)用rollback方法,以將值恢復(fù)為進(jìn)行更新之前的值。大多數(shù)JDBC驅(qū)動(dòng)程序都支持事務(wù)。事實(shí)上,符合JDBC的驅(qū)動(dòng)程序必須支持事務(wù)。DatabaseMetaData給出的信息描述DBMS所提供的事務(wù)支持水平。如果DBMS支持事務(wù)處理,它必須有某種途徑來管理兩個(gè)事務(wù)同時(shí)對(duì)一個(gè)數(shù)據(jù)庫(kù)進(jìn)行操作時(shí)可能發(fā)生的沖突。用戶可指定事務(wù)隔離級(jí)別,以指明DBMS應(yīng)該花多大精力來解決潛在沖突。例如,當(dāng)事務(wù)更改了某個(gè)值而第二個(gè)事務(wù)卻在該更改被提交或還原前讀取該值時(shí)該怎么辦。假設(shè)第一個(gè)事務(wù)被還原后,第二個(gè)事務(wù)所讀取的更改值將是無(wú)效的,那么是否可允許這種沖突?JDBC用戶可用以下代碼來指示DBMS允許在值被提交前讀取該值(“dirty讀取”),其中con是當(dāng)前連接:(TRANSACTION_READ_UNCOMMITTED);事務(wù)隔離級(jí)別越高,為避免沖突所花的精力也就越多。Connection接口定義了五級(jí),其中最低級(jí)別指定了根本就不支持事務(wù),而最高級(jí)別則指定當(dāng)事務(wù)在對(duì)某個(gè)數(shù)據(jù)庫(kù)進(jìn)行操作時(shí),任何其它事務(wù)不得對(duì)那個(gè)事務(wù)正在讀取的數(shù)據(jù)進(jìn)行任何更改。通常,隔離級(jí)別越高,應(yīng)用程序執(zhí)行的速度也就越慢(由于用于鎖定的資源耗費(fèi)增加了,而用戶間的并發(fā)操作減少了)。在決定采用什么隔離級(jí)別時(shí),開發(fā)人員必須在性能需求和數(shù)據(jù)一致性需求之間進(jìn)行權(quán)衡。當(dāng)然,實(shí)際所能支持的級(jí)別取決于所涉及的DBMS的功能。當(dāng)創(chuàng)建Connection對(duì)象時(shí),其事務(wù)隔離級(jí)別取決于驅(qū)動(dòng)程序,但通常是所涉及的數(shù)據(jù)庫(kù)的缺省值。用戶可通過調(diào)用setIsolationLevel方法來更改事務(wù)隔離級(jí)別。新的級(jí)別將在該連接過程的剩余時(shí)間內(nèi)生效。要想只改變一個(gè)事務(wù)的事務(wù)隔離級(jí)別,必須在該事務(wù)開始前進(jìn)行設(shè)置,并在該事務(wù)結(jié)束后進(jìn)行復(fù)位。我們不提倡在事務(wù)的中途對(duì)事務(wù)隔離級(jí)別進(jìn)行更改,因?yàn)檫@將立即觸發(fā)mit方法的調(diào)用,使在此之前所作的任何更改變成永久性的。JDBC驅(qū)動(dòng)管理內(nèi)幕是怎么樣的?DriverManager 類是 JDBC 的管理層,作用于用戶和驅(qū)動(dòng)程序之間。它跟蹤可用的驅(qū)動(dòng)程序,并在數(shù)據(jù)庫(kù)和相應(yīng)驅(qū)動(dòng)程序之間建立連接。另外,DriverManager類也處理諸如驅(qū)動(dòng)程序登錄時(shí)間限制及登錄和跟蹤消息的顯示等事務(wù)。對(duì)于簡(jiǎn)單的應(yīng)用程序。正如名稱所示,該方法將建立與數(shù)據(jù)庫(kù)的連接。JDBC允許用戶調(diào)用DriverManager的方法getDriver、getDrivers和registerDriver及Driver的方法connect。但多數(shù)情況下,讓DriverManager類管理建立連接的細(xì)節(jié)為上策。DriverManager類包含一列Driver類。所有Driver類都必須包含有一個(gè)靜態(tài)部分。它創(chuàng)建該類的實(shí)例,然后在加載該實(shí)例時(shí)DriverManager類進(jìn)行注冊(cè)。這樣,;而是在加載驅(qū)動(dòng)程序時(shí)由驅(qū)動(dòng)程序自動(dòng)調(diào)用。加載Driver類,然后自動(dòng)在DriverManager中注冊(cè)的方式有兩種:(1)這將顯式地加載驅(qū)動(dòng)程序類。由于這與外部設(shè)置無(wú)關(guān),因此推薦使用這種加載驅(qū)動(dòng)程序的方法。:(“”)。,(本該如此),則它在DriverManager的驅(qū)動(dòng)程序列表中,并可用于創(chuàng)建連接。(2)這是一個(gè)由DriverManager類加載的驅(qū)動(dòng)程序類名的列表,由冒號(hào)分隔:初始化DriverManager類時(shí),如果用戶已輸入了一個(gè)或多個(gè)驅(qū)動(dòng)程序,則DriverManager類將試圖加載它們。以下代碼說明程序員如何在~/.hotJava/properties中輸入三個(gè)驅(qū)動(dòng)程序類(啟動(dòng)時(shí),HotJava將把它加載到系統(tǒng)屬性列表中):=::;對(duì)DriverManager方法的第一次調(diào)用將自動(dòng)加載這些驅(qū)動(dòng)程序類。注意:加載驅(qū)動(dòng)程序的第二種方法需要持久的預(yù)設(shè)環(huán)境。如果對(duì)這一點(diǎn)不能保證。這也是引入特定驅(qū)動(dòng)程序的方法,因?yàn)橐坏〥riverManager類被初始化。在以上兩種情況中。如上所述,加載類時(shí)將自動(dòng)執(zhí)行這一過程。由于安全方面的原因,JDBC管理層將跟蹤哪個(gè)類加載器提供哪個(gè)驅(qū)動(dòng)程序。這樣,當(dāng)DriverManager類打開連接時(shí),它僅使用本地文件系統(tǒng)或與發(fā)出連接請(qǐng)求的代碼相同的類加載器提供的驅(qū)動(dòng)程序。加載Driver類并在DriverManager類中注冊(cè)后,它們即可用來與數(shù)據(jù)庫(kù)建立連接。,DriverManager將檢查每個(gè)驅(qū)動(dòng)程序,查看它是否可以建立連接。有時(shí)可能有多個(gè)JDBC驅(qū)動(dòng)程序可以與給定的URL連接。例如,與給定遠(yuǎn)程數(shù)據(jù)庫(kù)連接時(shí),可以使用JDBCODBC橋驅(qū)動(dòng)程序、JDBC到通用網(wǎng)絡(luò)協(xié)議驅(qū)動(dòng)程序或數(shù)據(jù)庫(kù)廠商提供的驅(qū)動(dòng)程序。在這種情況下測(cè)試驅(qū)動(dòng)程序的順序至關(guān)重要,因?yàn)镈riverManager將使用它所找到的第一個(gè)可以成功連接到給定URL的驅(qū)動(dòng)程序。首先DriverManager試圖按注冊(cè)的順序使用每個(gè)驅(qū)動(dòng)程序()。它將跳過代碼不可信任的驅(qū)動(dòng)程序,除非加載它們的源與試圖打開連接的代碼的源相同。,然后連接第一個(gè)認(rèn)出該URL的驅(qū)動(dòng)程序。這種方法初看起來效率不高,但由于不可能同時(shí)加載數(shù)十個(gè)驅(qū)動(dòng)程序,因此每次連接實(shí)際只需幾個(gè)過程調(diào)用和字符串比較。以下代碼是通常情況下用驅(qū)動(dòng)程序(例如JDBCODBC橋驅(qū)動(dòng)程序)建立連接所需所有步驟的示例:(“”);//加載驅(qū)動(dòng)程序 String url = “jdbc:odbc:fred”;(url,“userID”,“passwd”); 如何利用JDBC發(fā)送SQL語(yǔ)句?Statement對(duì)象用于將SQL語(yǔ)句發(fā)送到數(shù)據(jù)庫(kù)中。實(shí)際上有三種Statement對(duì)象,它們都作為在給定連接上執(zhí)行SQL語(yǔ)句的包容器:Statement、PreparedStatement(它從Statement繼承而來)和CallableStatement(它從PreparedStatement繼承而來)。它們都專用于發(fā)送特定類型的SQL語(yǔ)句:Statement對(duì)象用于執(zhí)行不帶參數(shù)的簡(jiǎn)單SQL語(yǔ)句;PreparedStatement對(duì)象用于執(zhí)行帶或不帶IN參數(shù)的預(yù)編譯SQL語(yǔ)句;CallableStatement對(duì)象用于執(zhí)行對(duì)數(shù)據(jù)庫(kù)已存儲(chǔ)過程的調(diào)用。Statement接口提供了執(zhí)行語(yǔ)句和獲取結(jié)果的基本方法;PreparedStatement接口添加了處理IN參數(shù)的方法;而CallableStatement添加了處理OUT參數(shù)的方法。建立了到特定數(shù)據(jù)庫(kù)的連接之后,就可用該連接發(fā)送SQL語(yǔ)句。Statement對(duì)象用Connection的方法createStatement創(chuàng)建,如下列代碼段中所示:Connection con = (url,“sunny”,“); Statement stmt = ();為了執(zhí)行Statement對(duì)象,被發(fā)送到數(shù)據(jù)庫(kù)的SQL語(yǔ)句將被作為參數(shù)提供給Statement的方法:ResultSet rs = (”SELECT a,b,c FROM Table2“);Statement接口提供了三種執(zhí)行SQL語(yǔ)句的方法:executeQuery、executeUpdate和execute。使用哪一個(gè)方法由SQL語(yǔ)句所產(chǎn)生的內(nèi)容決定。方法executeQuery用于產(chǎn)生單個(gè)結(jié)果集的語(yǔ)句,例如SELECT語(yǔ)句。方法executeUpdate用于執(zhí)行INSERT、UPDATE或DELETE語(yǔ)句以及SQL DDL(數(shù)據(jù)定義語(yǔ)言)語(yǔ)句,例如CREATE TABLE和DROP TABLE。INSERT、UPDATE或DELETE語(yǔ)句的效果是修改表中零行或多行中的一列或多列。executeUpdate的返回值是一個(gè)整數(shù),指示受影響的行數(shù)(即更新計(jì)數(shù))。對(duì)于CREATE TABLE或DROP TABLE等不操作行的語(yǔ)句,executeUpdate的返回值總為零。執(zhí)行語(yǔ)句的所有方法都將關(guān)閉所調(diào)用的Statement對(duì)象的當(dāng)前打開結(jié)果集(如果存在)。這意味著在重新執(zhí)行Statement對(duì)象之前,需要完成對(duì)當(dāng)前ResultSet對(duì)象的處理。應(yīng)注意,繼承了Statement接口中所有方法的PreparedStatement接口都有自己的executeQuery、executeUpdate和execute方法。Statement對(duì)象本身不包含SQL語(yǔ)句。PreparedStatement對(duì)象并不需要SQL語(yǔ)句作為參數(shù)提供給這些方法,因?yàn)樗鼈円呀?jīng)包含預(yù)編譯SQL語(yǔ)句。CallableStatement對(duì)象繼承這些方法的PreparedStatement形式。對(duì)于這些方法的PreparedStatement或CallableStatement版本,使用查詢參數(shù)將拋出SQLException。當(dāng)連接處于自動(dòng)提交模式時(shí),其中所執(zhí)行的語(yǔ)句在完成時(shí)將自動(dòng)提交或還原。語(yǔ)句在已執(zhí)行且所有結(jié)果返回時(shí),即認(rèn)為已完成。對(duì)于返回一個(gè)結(jié)果集的executeQuery方法,在檢索完ResultSet對(duì)象的所有行時(shí)該語(yǔ)句完成。對(duì)于方法executeUpdate,當(dāng)它執(zhí)行時(shí)語(yǔ)句即完成。但在少數(shù)調(diào)用方法execute的情況中,在檢索所有結(jié)果集或它生成的更新計(jì)數(shù)之后語(yǔ)句才完成。有些DBMS將已存儲(chǔ)過程中的每條語(yǔ)句視為獨(dú)立的語(yǔ)句;而另外一些則將整個(gè)過程視為一個(gè)復(fù)合語(yǔ)句。在啟用自動(dòng)提交時(shí),這種差別就變得非常重要,因?yàn)樗绊懯裁磿r(shí)候調(diào)用mit方法。在前一種情況中,每條語(yǔ)句單獨(dú)提交;在后一種情況中,所有語(yǔ)句同時(shí)提交。Statement對(duì)象將由Java垃圾收集程序自動(dòng)關(guān)閉。而作為一種好的編程風(fēng)格,應(yīng)在不需要Statement對(duì)象時(shí)顯式地關(guān)閉它們。這將立即釋放DBMS資源,有助于避免潛在的內(nèi)存問題。execute方法應(yīng)該僅在語(yǔ)句能返回多個(gè)ResultSet對(duì)象、多個(gè)更新計(jì)數(shù)或ResultSet對(duì)象與更新計(jì)數(shù)的組合時(shí)使用。當(dāng)執(zhí)行某個(gè)已存儲(chǔ)過程或動(dòng)態(tài)執(zhí)行未知SQL字符串(即應(yīng)用程序程序員在編譯時(shí)未知)時(shí),有可能出現(xiàn)多個(gè)結(jié)果的情況,盡管這種情況很少見。例如,用戶可能執(zhí)行一個(gè)已存儲(chǔ)過程,并且該已存儲(chǔ)過程可執(zhí)行更新,然后執(zhí)行選擇,再進(jìn)行更新,再進(jìn)行選擇,等等。通常使用已存儲(chǔ)過程的人應(yīng)知道它所返回的內(nèi)容。因?yàn)榉椒╡xecute處理非常規(guī)情況,所以獲取其結(jié)果需要一些特殊處理并不足為怪。例如,假定已知某個(gè)過程返回兩個(gè)結(jié)果集,則在使用方法execute執(zhí)行該過程后,必須調(diào)用方法getResultSet獲得第一個(gè)結(jié)果集,然后調(diào)用適當(dāng)?shù)膅etXXX方法獲取其中的值。要獲得第二個(gè)結(jié)果集,需要先調(diào)用getMoreResults方法,然后再調(diào)用getResultSet方法。如果已知某個(gè)過程返回兩個(gè)更新計(jì)數(shù),則首先調(diào)用方法getUpdateCount,然后調(diào)用getMoreResults,并再次調(diào)用getUpdateCount。對(duì)于不知道返回內(nèi)容,則情況更為復(fù)雜。如果結(jié)果是ResultSet對(duì)象,則方法execute返回
點(diǎn)擊復(fù)制文檔內(nèi)容
環(huán)評(píng)公示相關(guān)推薦
文庫(kù)吧 www.dybbs8.com
備案圖鄂ICP備17016276號(hào)-1