JDBC基於MySQL

來源:互聯網
上載者:User

標籤:jdbc_mysql

<一>Java 中的資料存放區技術

在Java中資料庫存取技術可分為如下幾類

1.JDBC直接存取資料庫

2.JDO技術

3.第三方O/R工具如Hibernate, ibatis 等

注:JDBC是java訪問資料庫的基石JDO, Hibernate等只是更好的封裝了JDBC。

<二>JDBC基礎

1.JDBC(Java Database Connectivity)是一個獨立於特定資料庫管理系統、通用的SQL資料庫存取和操作的公用介面一組API定義了用來訪問資料庫的標準Java類庫使用這個類庫可以以一種標準的方法、方便地訪問資料庫資源

2.JDBC為訪問不同的資料庫提供了一種統一的途徑為開發人員屏蔽了一些細節問題。

3.JDBC的目標是使Java程式員使用JDBC可以串連任何提供了JDBC驅動程式的資料庫系統這樣就使得程式員無需對特定的資料庫系統的特點有過多的瞭解從而大大簡化和加快了開發過程。

4.JDBC體繫結構

(1)JDBC介面API包括兩個層次

 *面嚮應用的APIJava API抽象介面供應用程式開發人員使用串連資料庫執行SQL語句獲得結果。

 **面向資料庫的APIJava Driver API供開發商開發資料庫驅動程式用。

5.JDBC驅動程式分類

(1).JDBC驅動程式各個資料庫廠商根據JDBC的規範製作的 JDBC 實作類別的類庫  

(2).JDBC驅動程式總共有四種類型

*JDBC-ODBC橋。 

**部分本地API部分Java的驅動程式。 

***JDBC網路純Java驅動程式。 

****本地協議的純 Java 驅動程式。 

注第(3)(4)兩類都是純Java的驅動程式因此對於Java開發人員來說它們在效能、可移植性、功能等方面都有優勢。 

6.ODBC

(1)早期對資料庫的訪問都是調用資料庫廠商提供的專有的 API。為了在 Windows 平台下提供統一的訪問方式微軟推出了 ODBC(Open Database Connectivity開放式資料庫連接)並提供了 ODBC API使用者在程式中只需要調用 ODBC API由 ODBC 驅動程式將調用轉換成為對特定的資料庫的調用請求

(2)一個基於ODBC的應用程式對資料庫的操作不依賴任何DBMS(database manager system)不直接與DBMS打交道所有的資料庫操作由對應的DBMS的ODBC驅動程式完成。也就是說不論是FoxPro、Access , MYSQL還是Oracle資料庫均可用ODBC API進行訪問。由此可見ODBC的最大優點是能以統一的方式處理所有的資料庫。

7.JDBC-ODBC橋 

JDBC-ODBC 橋本身也是一個驅動利用這個驅動可以使用 JDBC-API 通過ODBC 去訪問資料庫。這種機制實際上是把標準的 JDBC 調用轉換成相應的 ODBC 調用並通過 ODBC 訪問資料庫

因為需要通過多層調用所以利用 JDBC-ODBC 橋訪問資料庫的效率較低

在 JDK 中提供了 JDBC-ODBC 橋的實作類別(sun.jdbc.odbc.JdbcOdbcDriver)

8.部分本地API部分Java的驅動程式

(1)這種類型的 JDBC 驅動程式使用 Java 編寫它調用資料庫廠商提供的本地 API

(2)通過這種類型的 JDBC 驅動程式訪問資料庫減少了 ODBC 的調用環節提高了資料庫訪問的效率

(3)在這種方式下需要在客戶的機器上安裝本地 JDBC 驅動程式和特定廠商的本地 API 

9.JDBC網路純Java驅動程式

(1)這種驅動利用中介軟體的應用伺服器來訪問資料庫。應用伺服器作為一個到多個資料庫的網關用戶端通過它可以串連到不同的資料庫伺服器。

(2)應用伺服器通常有自己的網路通訊協定Java 使用者程式通過 JDBC 驅動程式將 JDBC 調用發送給應用伺服器應用伺服器使用本地程式驅動訪問資料庫從而完成請求。

10.JDBC API

JDBC API 是一系列的介面它使得應用程式能夠進行資料庫聯結執行SQL語句並且得到返回結果。

11.Driver 介面

(1)Java.sql.Driver 介面是所有 JDBC 驅動程式需要實現的介面。這個介面是提供給資料庫廠商使用的不同資料庫廠商提供不同的實現

(2)在程式中不需要直接去訪問實現了 Driver 介面的類而是由驅動程式管理器類(java.sql.DriverManager)去調用這些Driver實現

12.載入與註冊 JDBC 驅動

(1)載入 JDBC 驅動需調用 Class 類的靜態方法 forName()向其傳遞要載入的 JDBC 驅動的類名

(2)DriverManager 類是驅動程式管理器類負責管理驅動程式

(3)常不用顯式調用 DriverManager 類的 registerDriver() 方法來註冊驅動程式類的執行個體因為 Driver 介面的驅動程式類都包含了靜態代碼塊在這個靜態代碼塊中會調用 DriverManager.registerDriver() 方法來註冊自身的一個執行個體

13.建立串連

(1)可以調用 DriverManager 類的 getConnection() 方法建立到資料庫的串連

(2)JDBC URL 用於標識一個被註冊的驅動程式驅動程式管理器通過這個 URL 選擇正確的驅動程式從而建立到資料庫的串連。

(3)JDBC URL的標準由三部分組成各部分間用冒號分隔。 

(4)jdbc:<子協議>:<子名稱>

協議JDBC URL中的協議總是jdbc 

子協議子協議用於標識一個資料庫驅動程式

子名稱一種標識資料庫的方法。子名稱可以依不同的子協議而變化用子名稱的目的是為了定位元據庫提供足夠的資訊 

14.幾種常用資料庫的JDBC URL

(1)對於 Oracle 資料庫連接採用如下形式 

jdbc:oracle:thin:@localhost:1521:sid

(2)對於 SQLServer 資料庫連接採用如下形式

jdbc:microsoft:sqlserver//localhost:1433; DatabaseName=sid

(3)對於 MYSQL 資料庫串連採用如下形式   

jdbc:mysql://localhost:3306/sid

15.訪問資料庫

(1)資料庫連接被用於向資料庫伺服器發送命令和 SQL 陳述式在串連建立後需要對資料庫進行訪問執行 sql 語句

(2)在 java.sql 包中有 3 個介面分別定義了對資料庫的調用的不同方式

Statement

PrepatedStatement

CallableStatement

16.Statement

(1)通過調用 Connection 對象的 createStatement 方法建立該對象

(2)該對象用於執行靜態 SQL 陳述式並且返回執行結果

(3)Statement 介面中定義了下列方法用於執行 SQL 陳述式

ResultSet excuteQuery(String sql)

int excuteUpdate(String sql)

17.ResultSet

通過調用 Statement 對象的 excuteQuery() 方法建立該對象

ResultSet 對象以邏輯表格的形式封裝了執行資料庫操作的結果集ResultSet 介面由資料庫廠商實現

ResultSet 對象維護了一個指向當前資料行的遊標初始的時候遊標在第一行之前可以通過 ResultSet 對象的 next() 方法移動到下一行

ResultSet 介面的常用方法

boolean next()

getString()

18.JDBC API 小結1

java.sql.DriverManager用來裝載驅動程式擷取資料庫連接。

java.sql.Connection完成對某一指定資料庫的聯結

java.sql.Statement在一個給定的串連中作為SQL執行聲明的容器他包含了兩個重要的子類型。

Java.sql.PreparedSatement 用於執行先行編譯的sql聲明

Java.sql.CallableStatement用於執行資料庫中預存程序的調用

java.sql.ResultSet對於給定聲明取得結果的途徑

19.SQL 插入式攻擊

(1)SQL 注入是利用某些系統沒有對使用者輸入的資料進行充分的檢查而在使用者輸入資料中注入非法的 SQL 陳述式段或命令從而利用系統的 SQL 引擎完成惡意行為的做法

(2)對於 Java 而言要防範 SQL 注入只要用 PreparedStatement 取代 Statement 就可以了

20.PreparedStatement

(1)可以通過調用 Connection 對象的 preparedStatement() 方法擷取 PreparedStatement 對象

(2)PreparedStatement 介面是 Statement 的子介面它表示一條先行編譯過的 SQL 陳述式

(3)PreparedStatement 對象所代表的 SQL 陳述式中的參數用問號(?)來表示調用 PreparedStatement 對象的 setXXX() 方法來設定這些參數. setXXX() 方法有兩個參數第一個參數是要設定的 SQL 陳述式中的參數的索引(從 1 開始)第二個是設定的 SQL 陳述式中的參數的值

21.PreparedStatement vs Statement

代碼的可讀性和可維護性. 

(1)PreparedStatement 能最大可能提高效能

DBServer會對先行編譯語句提供效能最佳化。因為先行編譯語句有可能被重複調用所以語句在被DBServer的編譯器編譯後的執行代碼被緩衝下來那麼下次調用時只要是相同的先行編譯語句就不需要編譯只要將參數直接傳入編譯過的語句執行代碼中就會得到執行。

(2)在statement語句中,即使是相同操作但因為資料內容不一樣,所以整個語句本身不能匹配,沒有緩衝語句的意義.事實是沒有資料庫會對普通語句編譯後的執行代碼緩衝.這樣每執行一次都要對傳入的語句編譯一次. 

(3)(語法檢查語義檢查翻譯成二進位命令緩衝)

PreparedStatement 可以防止 SQL 注入 

22.資料庫連接池connection pool 

(1)為解決傳統開發中的資料庫連接問題可以採用資料庫連接池技術。

(2)資料庫連接池的基本思想就是為資料庫連接建立一個“緩衝池”。預先在緩衝池中放入一定數量的串連當需要建立資料庫連接時只需從“緩衝池”中取出一個使用完畢之後再放回去。

(3)資料庫連接池負責分配、管理和釋放資料庫連接它允許應用程式重複使用一個現有的資料庫連接而不是重建立立一個。

(4)資料庫連接池在初始化時將建立一定數量的資料庫連接放到串連池中這些資料庫連接的數量是由最小資料庫連接數來設定的。無論這些資料庫連接是否被使用串連池都將一直保證至少擁有這麼多的串連數量。串連池的最大資料庫連接數量限定了這個串連池能佔有的最大串連數當應用程式向串連池請求的串連數超過最大串連數量時這些請求將被加入到等待隊列中。

23.資料庫連接池技術的優點

(1)資源重用

由於資料庫連接得以重用避免了頻繁建立釋放串連引起的大量效能開銷。在減少系統消耗的基礎上另一方面也增加了系統運行環境的平穩性。

(2)更快的系統反應速度

資料庫連接池在初始化過程中往往已經建立了若干資料庫連接置於串連池中備用。此時串連的初始化工作均已完成。對於業務請求處理而言直接利用現有可用串連避免了資料庫連接初始化和釋放過程的時間開銷從而減少了系統的回應時間

(3)新的資源分派手段

對於多應用共用同一資料庫的系統而言可在應用程式層通過資料庫連接池的配置實現某一應用最大可用資料庫連接數的限制避免某一應用獨佔所有的資料庫資源

(4)統一的串連管理避免資料庫連接泄露

在較為完善的資料庫連接池實現中可根據預先的佔用逾時設定強制回收被佔用串連從而避免了常規資料庫連接操作中可能出現的資源流失

24.兩種開源的資料庫連接池

(1)JDBC 的資料庫連接池使用 javax.sql.DataSource 來表示DataSource 只是一個介面該介面通常由伺服器(Weblogic, WebSphere, Tomcat)提供實現也有一些開源組織提供實現

*DBCP 資料庫連接池

**C3P0 資料庫連接池

(2)DataSource 通常被稱為資料來源它包含串連池和串連池管理兩個部分習慣上也經常把 DataSource 稱為串連池

25.DBCP 資料來源 

(1)DBCP 是 Apache 軟體基金組織下的開源串連池實現該串連池依賴該組織下的另一個開源系統Common-pool. 如需使用該串連池實現應在系統中增加如下兩個 jar 檔案

Commons-dbcp.jar串連池的實現

Commons-pool.jar串連池實現的依賴庫

(2)Tomcat 的串連池正是採用該串連池來實現的。該資料庫連接池既可以與應用伺服器整合使用也可由應用程式獨立使用。

26.DBCP 資料來源使用範例

(1)資料來源和資料庫連接不同資料來源無需建立多個它是產生資料庫連接的工廠因此整個應用只需要一個資料來源即可。

(2)當資料庫訪問結束後程式還是像以前一樣關閉資料庫連接conn.close(); 但上面的代碼並沒有關閉資料庫的物理串連它僅僅把資料庫連接釋放歸還給了資料庫連接池。

27.Apache—DBUtils簡介

commons-dbutils 是 Apache 組織提供的一個開源 JDBC工具類庫它是對JDBC的簡單封裝學習成本極低並且使用dbutils能極大簡化jdbc編碼的工作量同時也不會影響程式的效能。

API介紹

org.apache.commons.dbutils.QueryRunner

org.apache.commons.dbutils.ResultSetHandler

工具類

org.apache.commons.dbutils.DbUtils、。   

28.DbUtils類 

DbUtils 提供如關閉串連、裝載JDBC驅動程式等常規工作的工具類裡面的所有方法都是靜態。主要方法如下

public static void close(…) throws java.sql.SQLException DbUtils類提供了三個重載的關閉方法。這些方法檢查所提供的參數是不是NULL如果不是的話它們就關閉Connection、Statement和ResultSet。

public static void closeQuietly(…): 這一類方法不僅能在Connection、Statement和ResultSet為NULL情況下避免關閉還能隱藏一些在程式中拋出的SQLEeception。

public static void commitAndCloseQuietly(Connection conn) 用來提交串連然後關閉串連並且在關閉串連時不拋出SQL異常。 

public static boolean loadDriver(java.lang.String driverClassName)這一方裝載並註冊JDBC驅動程式如果成功就返回true。使用該方法你不需要捕捉這個異常ClassNotFoundException。

29.QueryRunner類 

(1)該類簡單化了SQL查詢它與ResultSetHandler組合在一起使用可以完成大部分的資料庫操作能夠大大減少編碼量。

(2)QueryRunner類提供了兩個構造方法

*預設的構造方法

**需要一個 javax.sql.DataSource 來作參數的構造方法。

30.QueryRunner類的主要方法

(1)public Object query(Connection conn, String sql, Object[] params, ResultSetHandler rsh) throws SQLException執行一個查詢操作在這個查詢中對象數組中的每個元素值被用來作為查詢語句的置換參數。該方法會自行處理 PreparedStatement 和 ResultSet 的建立和關閉。

(2)public Object query(String sql, Object[] params, ResultSetHandler rsh) throws SQLException: 幾乎與第一種方法一樣唯一的不同在於它不將資料庫連接提供給方法並且它是從提供給構造方法的資料來源(DataSource) 或使用的setDataSource 方法中重新獲得 Connection。

(3)public Object query(Connection conn, String sql, ResultSetHandler rsh) throws SQLException : 執行一個不需要置換參數的查詢操作。

(4)public int update(Connection conn, String sql, Object[] params) throws SQLException:用來執行一個更新插入、更新或刪除操作。

(5)public int update(Connection conn, String sql) throws SQLException用來執行一個不需要置換參數的更新操作。

31.ResultSetHandler介面 

(1)該介面用於處理 java.sql.ResultSet將資料按要求轉換為另一種形式。

(2)ResultSetHandler 介面提供了一個單獨的方法Object handle (java.sql.ResultSet .rs)。

32.ResultSetHandler 介面的實作類別

(1)ArrayHandler把結果集中的第一行資料轉成對象數組。

(2)ArrayListHandler把結果集中的每一行資料都轉成一個數組再存放到List中。

(3)BeanHandler將結果集中的第一行資料封裝到一個對應的JavaBean執行個體中。

(4)BeanListHandler將結果集中的每一行資料都封裝到一個對應的JavaBean執行個體中存放到List裡。


本文出自 “我是寧采臣” 部落格,謝絕轉載!

JDBC基於MySQL

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.