java JDK8 學習筆記——第16章 整合資料庫

來源:互聯網
上載者:User

標籤:

第十六章 整合資料庫16.1 JDBC入門16.1.1 JDBC簡介

1、JDBC是java線上資料庫的標準規範。它定義了一組標準類與介面,標準API中的介面會有資料庫廠商操作,稱為JDBC驅動程式。

2、JDBC標準主要分為兩個部分:JDBC應用程式開發人員介面和JDBC驅動程式開發人員介面。應用程式需要線上資料庫,其相關API主要在java.sql和javax.sql兩個包中。

3、應用程式使用JDBC線上資料庫的通用文法:

Connection conn = DriverManager.getConnection(……);
Statement st = conn.createStatement();
ResultSet rs = st.executeQuery("SELECT * FROM T_USER");

4、JDBC希望達到一個“寫一個java程式,操作所有資料庫”的目的。

5、磁碟機按照操作方式可分為四種類型: 
(1)JDBC-ODBC Bridge Driver :其在Microsoft系統上最為成熟。 
缺點:ODBC在平台上先設定好,彈性不足;本身也有跨平台限制。 
(2)Native API Driver:以原生方式,調用資料庫提供的原生連結庫。 
缺點:有跨平台限制  
優點:速度最快 
(3)JDBC-Net Driver :將JDBC方法調用轉換為特定的網路通訊協定調用 
優點:跨平台 
缺點:速度慢,獲得架構彈性是使用這種類型驅動程式的目的 
(4)Native Protocol Driver :由資料庫廠商直接提供 
優點:跨平台 ——是最常見的驅動程式類型

16.1.2 串連資料庫

1、要串連資料庫,必須在CLASSPATH中設定驅動程式JAR文檔。

2、基本資料庫操作相關JDBC介面或類是為位於java.sql包中。要取得資料庫聯機,需要進行幾個動作:

(1)註冊Driver對象 
(2)取得Connection操作對象 
(3)關閉Connection操作對象

3、註冊Driver對象 
使用JDBC要求載入.class文檔的4種方式: 
(1)使用Class.forName() 
(2)自行建立Driver介面操作類的執行個體 
(3)啟動JVM時指定jdbc.drivers屬性 
(4)設定JAR中/services/java.sql.Driver文檔

4、取得Connection操作對象 
Connection介面的操作對象是資料庫聯機代表對象。其定義了資料庫連接時的協議、子協議、資料來源識別:

協議:子協議:資料來源識別 
協議:jdbc 
子協議:橋接的驅動程式 
資料來源識別:標出資料庫的地址、連接埠號碼、名稱、使用者、密碼等資訊。 
注意:要使用中文存取必須給定參數useUnicode和characterEncoding。表明是否使用Unicode,並指定字元編碼方式。 
在XML設定檔中,不能直接寫&符號,要寫成&amp。

16.1.3 使用Statement、ResultSet

1、Statement是SQL描述的代表對象,可以使用executeUpdate()、executeQuery()等方法來執行SQL。

2、Statement的executeUpdate()方法用於SELECT等查詢資料庫的SQL,返回int結果,表示資料變動的筆數

3、Statement的executeQuery()方法返回java.sql.ResultSet對象,代表查詢結果。

4、Statement的execute()方法用來執行SQL,返回true表示SQL執行將返回ResultSet作為查詢結果。

16.1.4 使用PreparedStatement、CallableStatement

1、如果有些操作只是SQL語句當中某些參數會有所不同,其餘的SQL子句皆相同,則可以使用java.sql.PreparedStatement。調用clearParametere()清除設定的參數,之後就能再次使用這個PreparedStatement執行個體。

2、使用PreparedStatement的好處: 
(1)可以將SQL描述先行編譯為資料庫的執行指令,執行速度可以快很多。 
(2)防止SQL注入

3、如果撰寫資料庫的預存程式,並想要使用JDBC來調用,則可使用java.sql.CallableStatement。必須調用prepareCall()建立CallableStatement異常,可以使用registerOutParameter()註冊輸出參數。

16.2 JDBC進階16.2.1 使用DataSource取得聯機

1、讓MessageDAO依賴於java.sql.DataSource介面,可以通過其定義的getConnection()方法取得Connection。

2、日後要修改資料庫伺服器主機位置,為了打算重複利用Connection對象而想要加入聯機池機制等情況,這個MessageDAO都不用修改。

3、聯機相關資訊可以使用.properties設定。

16.2.2 使用ResultSet捲動、更新資料

1、建立Statement或PreparedStatement執行個體時,可以指定結果集類型與並行方式。

createStatement(int resultSetType,int resultSetConcurrency) prepareStatement(String sql,int resultSetType,int resultSetConcurrency)

2、結果集類型resultSetType可以指定3種:

ResultSet.TYPE _ FORWARD _ ONLY(預設) 
ResultSet.TYPE _ SCROLL _ INSENSITIVE 
ResultSet.TYPE _ SCROLL _ SENSITIVE

3、更新設定resultSetConcurrency可以指定2種:

ResultSet.CONCURREADONLY(預設) 
ResultSet.CONCUR_UPDATABLE

4、ResultSet進行資料修改的條件限制

必須選取單一表格 
必須選取主鍵 
必須選取所有NOT NULL的值

16.2.3 批次更新

1、批次更新的限制是,SQL不能使SELECT,否則會拋出異常。

2、要支援批次更新,必須在JDBC URL 上附加rewriteBatchedStatements = true 參數才有實際的作用。

16.2.4 Blob與Clob

1、BLOB用於儲存大量的位元據,像是圖檔、影音檔等;CLOB用於儲存大量的文字資料。

2、可以把BLOB欄位對應byte[]或輸入\輸出串流。

16.2.5 交易簡介

1、交易的四個基本原則:

原子性:若有一個步驟失敗,必須撤回曾經執行過的動作,回到交易前的狀態 
一致性:交易作用的資料集合在交易前後必須一致 
隔離行為:交易與交易之間,必須互不干擾 
持久性:即使系統掛了,交易的結果也不能遺失

2、在交易管理時,僅想要撤回某個SQL執行點,則可以設定儲存點。

3、資料庫可設定指定的隔離行為,可設定常數為:

TRANSACTION _ UNCOMMITTED: 更新遺失
最低隔離層級,讀取錯誤資料的幾率太高,一般不會採用這種隔離層級。
TRANSACTION _ COMMITTED: 更新遺失+髒讀 
交易讀取的資料必須是其他交易已確認的資料 
TRANSACTION _ REPEATABLE _ READ: 更新遺失+髒讀+無法重複讀取
讀取交易在確認前不阻止其他讀取交易,,但會阻止其他更新交易。 
TRANSACTION _ SERIALIZABLE: 更新遺失+髒讀+無法重複讀取+幻讀 交易時若有資料不一致的疑慮,交易必須可以照順序逐一進行。

4、通過JDBC得知資料庫是否支援某個隔離行為設定,可以通過Connection的getMetaData()取得DatabaseMetadata對象,通過DatabaseMetadata的supportTransaction-IsolationLevel()得知是否支援某個隔離行為。

16.2.6 metadata簡介

Metadata即“詮讀資料的資料”,可以通過connection的getMetaData()方法取得DatabaseMetaData對象,可以取得資料庫整體資訊,而ResultSet表示查詢到的資料,可以通過ResultSet的getMetaData()方法,取得ResultSetMetaData對象。

16.2.7 RowSet簡介

1、javax.sql.RowSet介面,代表資料的列集合。可以對列集合進行增刪改查。通過setCommand()設定查詢指令,通過execute()執行查詢指令以填充資料。

2、RowSet定義了五個標準列集合子介面:

(1)jdbcRowSet 
是聯機式的RowSet,保持與資料庫的聯機,可視為取得、操作RowSet的行為封裝。 
(2)CacheRowSet 
是離線式的RowSet,在查詢並填充完資料後,會斷開與資料來源的聯機 
(3)FilteredRowSet 
可以對列集合進行過濾,實作類別似SQL中WHERE等條件式的功能。 
(4)JoinRowSet 
可以讓你結合兩個RowSet對象,可以通過setMatchColumn()指定要結合的行,然後使用addRowSet()來加入RowSet進行結合。 
(5)WebRowSet 
是CachedRowSet的子介面,不僅具備離線操作,還能進行XM讀寫。

java JDK8 學習筆記第16章

java JDK8 學習筆記——第16章 整合資料庫

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.