JDBC訪問數(shù)據(jù)庫1_第1頁
JDBC訪問數(shù)據(jù)庫1_第2頁
JDBC訪問數(shù)據(jù)庫1_第3頁
JDBC訪問數(shù)據(jù)庫1_第4頁
JDBC訪問數(shù)據(jù)庫1_第5頁
已閱讀5頁,還剩16頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領

文檔簡介

1、Java高級編程高級編程JDBC訪問數(shù)據(jù)庫訪問數(shù)據(jù)庫JDBC簡介簡介SUN公司為了簡化、統(tǒng)一對數(shù)據(jù)庫的操作,定義了一套公司為了簡化、統(tǒng)一對數(shù)據(jù)庫的操作,定義了一套Java操作數(shù)操作數(shù)據(jù)庫的規(guī)范,稱之為據(jù)庫的規(guī)范,稱之為JDBC。JDBC簡介(續(xù))簡介(續(xù))JDBC全稱為:全稱為:Java Data Base Connectivity(java數(shù)據(jù)庫連接),數(shù)據(jù)庫連接),它主要由接口組成,組成它主要由接口組成,組成JDBC的個包:的個包:java.sqljavax.sql開發(fā)開發(fā)JDBC應用需要以上應用需要以上2個包的支持外,還需要導入相應個包的支持外,還需要導入相應JDBC的數(shù)的數(shù)據(jù)庫實現(xiàn)據(jù)庫

2、實現(xiàn)(即數(shù)據(jù)庫驅動即數(shù)據(jù)庫驅動)。第一個第一個JDBC程序程序編寫一個程序,這個程序從編寫一個程序,這個程序從emp表中讀取數(shù)據(jù),并打印在命令行窗口中。表中讀取數(shù)據(jù),并打印在命令行窗口中。JDBC程序詳解(程序詳解(1)數(shù)據(jù)庫數(shù)據(jù)庫URLURL用于標識數(shù)據(jù)庫的位置,程序員通過用于標識數(shù)據(jù)庫的位置,程序員通過URL地址告訴地址告訴JDBC程序連接哪個數(shù)據(jù)。程序連接哪個數(shù)據(jù)。URL的寫法為:的寫法為:JDBC程序詳解(程序詳解(1)續(xù))續(xù)常用數(shù)據(jù)庫常用數(shù)據(jù)庫URL地址的寫法:地址的寫法:JDBC程序詳解(程序詳解(2)DriverManagerDriverManager用于加載驅動,并創(chuàng)建與數(shù)據(jù)庫

3、的鏈接,這個用于加載驅動,并創(chuàng)建與數(shù)據(jù)庫的鏈接,這個API的常用方法:的常用方法:注意:在實際開發(fā)中并不推薦采用注意:在實際開發(fā)中并不推薦采用registerDriver方法注冊驅動。原方法注冊驅動。原因有二:因有二:查看查看Driver的源代碼可以看到,如果采用此種方式,會導致驅動程序注冊兩次,也就是的源代碼可以看到,如果采用此種方式,會導致驅動程序注冊兩次,也就是在內(nèi)存中會有兩個在內(nèi)存中會有兩個Driver對象。對象。程序依賴程序依賴mysql的的api,脫離,脫離mysql的的jar包,程序將無法編譯,將來程序切換底層數(shù)據(jù)包,程序將無法編譯,將來程序切換底層數(shù)據(jù)庫將會非常麻煩。庫將會非常

4、麻煩。JDBC程序詳解(程序詳解(2)續(xù))續(xù)DriverManager推薦方式:推薦方式:Class.forName(“oracle.jdbc.OracleDriver”);采用此種方式不會導致驅動對象在內(nèi)存中重復出現(xiàn),并且采用此種方式,程序僅僅只需采用此種方式不會導致驅動對象在內(nèi)存中重復出現(xiàn),并且采用此種方式,程序僅僅只需要一個字符串,不需要依賴具體的驅動,使程序的靈活性更高。要一個字符串,不需要依賴具體的驅動,使程序的靈活性更高。JDBC程序詳解(程序詳解(3)ConnectionJDBC程序中的程序中的Connection,它用于代表數(shù)據(jù)庫的鏈接。,它用于代表數(shù)據(jù)庫的鏈接。這個對象的常用

5、方法:這個對象的常用方法:createStatement():創(chuàng)建向數(shù)據(jù)庫發(fā)送:創(chuàng)建向數(shù)據(jù)庫發(fā)送sql的的statement對象。對象。prepareStatement(sql) :創(chuàng)建向數(shù)據(jù)庫發(fā)送預編譯:創(chuàng)建向數(shù)據(jù)庫發(fā)送預編譯sql的的PrepareSatement對象。對象。prepareCall(sql):創(chuàng)建執(zhí)行存儲過程的:創(chuàng)建執(zhí)行存儲過程的callableStatement對象。對象。 setAutoCommit(boolean autoCommit):設置事務是否自動提交,默認:設置事務是否自動提交,默認true。 commit() :在鏈接上提交事務。:在鏈接上提交事務。roll

6、back() :在此鏈接上回滾事務。:在此鏈接上回滾事務。JDBC程序詳解(程序詳解(4)StatementJDBC程序中的程序中的Statement對象用于向數(shù)據(jù)庫發(fā)送對象用于向數(shù)據(jù)庫發(fā)送SQL語句語句Statement對象常用方法:對象常用方法:executeQuery(String sql) :用于向數(shù)據(jù)發(fā)送查詢語句。:用于向數(shù)據(jù)發(fā)送查詢語句。executeUpdate(String sql):用于向數(shù)據(jù)庫發(fā)送:用于向數(shù)據(jù)庫發(fā)送insert、update或或delete語句語句execute(String sql):用于向數(shù)據(jù)庫發(fā)送任意:用于向數(shù)據(jù)庫發(fā)送任意sql語句語句addBatch

7、(String sql) :把多條:把多條sql語句放到一個批處理中。語句放到一個批處理中。executeBatch():向數(shù)據(jù)庫發(fā)送一批:向數(shù)據(jù)庫發(fā)送一批sql語句執(zhí)行。語句執(zhí)行。JDBC程序詳解(程序詳解(5)ResultSetJDBC程序中的程序中的ResultSet用于代表用于代表Sql語句的執(zhí)行結果。語句的執(zhí)行結果。ResultSet還提供了對結果集進行滾動的方法:還提供了對結果集進行滾動的方法:next():移動到下一行:移動到下一行previous():移動到前一行:移動到前一行absolute(int row):移動到指定行:移動到指定行beforeFirst():移動:移動r

8、esultSet的最前面。的最前面。afterLast() :移動到:移動到resultSet的最后面。的最后面。JDBC程序詳解(程序詳解(6)釋放資源釋放資源JDBC程序運行完后,切記要釋放程序在運行過程中,創(chuàng)建的那些與數(shù)據(jù)庫進行交互的程序運行完后,切記要釋放程序在運行過程中,創(chuàng)建的那些與數(shù)據(jù)庫進行交互的對象,這些對象通常是對象,這些對象通常是ResultSet, Statement和和Connection對象。對象。特別是特別是Connection對象,它是非常稀有的資源,用完后必須馬上釋放,如果對象,它是非常稀有的資源,用完后必須馬上釋放,如果Connection不能及時、正確的關閉,

9、極易導致系統(tǒng)宕機。不能及時、正確的關閉,極易導致系統(tǒng)宕機。Connection的使用原則是盡的使用原則是盡量晚創(chuàng)建,盡量早的釋放。量晚創(chuàng)建,盡量早的釋放。為確保資源釋放代碼能運行,資源釋放代碼也一定要放在為確保資源釋放代碼能運行,資源釋放代碼也一定要放在finally語句中。語句中。使用使用JDBC對數(shù)據(jù)庫進行對數(shù)據(jù)庫進行CRUDDemo編寫程序對編寫程序對emp表進行增刪改查操作。表進行增刪改查操作。編寫工具類簡化編寫工具類簡化CRUD操作。操作。(異常暫不處理異常暫不處理)PreparedStatementPreperedStatement是是Statement子類子類,它的實例對象可以通

10、過調(diào)用它的實例對象可以通過調(diào)用Connection.preparedStatement()方法獲得方法獲得相對于相對于Statement對象而言:對象而言:PreperedStatement可以避免可以避免SQL注入的問題。注入的問題。Statement會使數(shù)據(jù)庫頻繁編譯會使數(shù)據(jù)庫頻繁編譯SQL,可能造成數(shù)據(jù)庫緩沖區(qū)溢出,可能造成數(shù)據(jù)庫緩沖區(qū)溢出PreparedStatement 可對可對SQL進行預編譯,從而提高數(shù)據(jù)庫的執(zhí)行效率。進行預編譯,從而提高數(shù)據(jù)庫的執(zhí)行效率。PreperedStatement對于對于sql中的參數(shù),允許使用占位符的形式進行替換,簡化中的參數(shù),允許使用占位符的形式進行

11、替換,簡化sql語句語句的編寫。的編寫。JDBC的高級特性示例的高級特性示例使用使用JDBC進行批處理進行批處理使用使用JDBC調(diào)用調(diào)用Oracle的存儲過程和存儲函數(shù)的存儲過程和存儲函數(shù)事務事務事務指邏輯上的一組操作,組成這組操作的各個單元,要不全部成功事務指邏輯上的一組操作,組成這組操作的各個單元,要不全部成功,要不全部不成功。,要不全部不成功。例如:例如:AB轉帳,對應于如下兩條轉帳,對應于如下兩條sql語句語句update from account set money=money+100 where name=b;update from account set money=money-

12、100 where name=a;JDB中的事務中的事務當當JDBC程序向數(shù)據(jù)庫獲得一個程序向數(shù)據(jù)庫獲得一個Connection對象時,默認情況下這個對象時,默認情況下這個Connection對象會自動向數(shù)據(jù)庫提交在它上面發(fā)送的對象會自動向數(shù)據(jù)庫提交在它上面發(fā)送的SQL語句。若語句。若想關閉這種默認提交方式,讓多條想關閉這種默認提交方式,讓多條SQL在一個事務中執(zhí)行,可使用下在一個事務中執(zhí)行,可使用下列語句:列語句:JDBC控制事務語句控制事務語句Connection.setAutoCommit(false); 相當于:開啟事務相當于:開啟事務Connection.rollback(); ro

13、llbackCmit(); commit演示銀行轉帳案例演示銀行轉帳案例在在JDBC代碼中使如下轉帳操作在同一事務中執(zhí)行。代碼中使如下轉帳操作在同一事務中執(zhí)行。update from account set money=money-100 where name=a;update from account set money=money+100 where name=b;事務的特性事務的特性(ACID)原子性(原子性(Atomicity)原子性是指事務是一個不可分割的工作單位,事務中的操作要么都發(fā)生,要么都不發(fā)生。原子性是指事務是一個不可分割的工作單位,事務中的操作要么都發(fā)生,要么都不發(fā)生。 一

14、致性(一致性(Consistency)事務必須使數(shù)據(jù)庫從一個一致性狀態(tài)變換到另外一個一致性狀態(tài)。事務必須使數(shù)據(jù)庫從一個一致性狀態(tài)變換到另外一個一致性狀態(tài)。隔離性(隔離性(Isolation)事務的隔離性是多個用戶并發(fā)訪問數(shù)據(jù)庫時,數(shù)據(jù)庫為每一個用戶開啟的事務,不能被其事務的隔離性是多個用戶并發(fā)訪問數(shù)據(jù)庫時,數(shù)據(jù)庫為每一個用戶開啟的事務,不能被其他事務的操作數(shù)據(jù)所干擾,多個并發(fā)事務之間要相互隔離。他事務的操作數(shù)據(jù)所干擾,多個并發(fā)事務之間要相互隔離。持久性(持久性(Durability)持久性是指一個事務一旦被提交,它對數(shù)據(jù)庫中數(shù)據(jù)的改變就是永久性的,接下來即使數(shù)持久性是指一個事務一旦被提交,它對

15、數(shù)據(jù)庫中數(shù)據(jù)的改變就是永久性的,接下來即使數(shù)據(jù)庫發(fā)生故障也不應該對其有任何影響。據(jù)庫發(fā)生故障也不應該對其有任何影響。事務的隔離級別事務的隔離級別多個線程開啟各自事務操作數(shù)據(jù)庫中數(shù)據(jù)時,數(shù)據(jù)庫系統(tǒng)要負責隔離多個線程開啟各自事務操作數(shù)據(jù)庫中數(shù)據(jù)時,數(shù)據(jù)庫系統(tǒng)要負責隔離操作,以保證各個線程在獲取數(shù)據(jù)時的準確性。操作,以保證各個線程在獲取數(shù)據(jù)時的準確性。如果不考慮隔離性,可能會引發(fā)如下問題:如果不考慮隔離性,可能會引發(fā)如下問題:臟讀:臟讀:指一個事務讀取了另外一個事務未提交的數(shù)據(jù)。指一個事務讀取了另外一個事務未提交的數(shù)據(jù)。不可重復讀:不可重復讀:在一個事務內(nèi)讀取表中的某一行數(shù)據(jù),多次讀取結果不同。在一個事務內(nèi)讀取表中的某一行數(shù)據(jù),多次讀取結果不同。虛讀虛讀(幻讀幻讀):是指在一個事務內(nèi)讀取到了別的事務插入的數(shù)據(jù),導致前后讀取不一致。是指在一個事務內(nèi)讀取到了別的事務插入的數(shù)據(jù),導致前后讀取不一致。事務隔離性的設置語句事務隔離性的設置語句數(shù)據(jù)庫共定義了四種隔離級別:數(shù)據(jù)庫共定義了四種隔離級別:Seriali

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論