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

正文內(nèi)容

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

2025-10-11 20:29本頁面
  

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