JDBC、DriverManage、JNDI、数据源(DataSource)、连接池的区别
JDBC、DriverManage、JNDI、數據源(DataSource)、連接池的區別
- 使用 JDBC 來訪問數據庫的基本流程
- JDBC 與 DriverManage
- 數據源
- JNDI
- 連接池
使用 JDBC 來訪問數據庫的基本流程
構造連接數據庫的 4 個屬性:驅動器名、數據庫 URL、數據庫用戶名、數據庫密碼。
在系統中注冊驅動器。方法有很多,如 System.setProperty("jdbc.drivers", driver);。
將原始的數據庫信息傳入靜態方法 DriverManager.getConnection 來獲得一個 Connection 對象。
利用 Connection 對象生成一個 Statement 對象。
使用 Statement 對象的方法 executeXXX 來執行 SQL 語句。如果這個 SQL 語句屬于查詢語句,可以接收其返回值作為查詢結果。
示例代碼如下:
/*** driver、url、user、password、sql 均為 String 類型*/ System.setProperty("jdbc.drivers", driver); Connection connection = DriverManager.getConnection(url, user, password); Statement statement = connection.createStatement(); ResultSet result = statement.executeQuery(sql);JDBC 與 DriverManage
??JDBC 全稱 Java Database Connectivity,譯為 Java 數據庫連接。我們知道,數據庫語言與Java語言是不同的語言,因此需要一種途徑來將這兩者聯系起來。JDBC 就起著這樣的一種橋梁的作用。一般說 JDBC 也指包名前綴為 java.sql 的包的內容,它包含一系列的類與接口。常用的類與接口有DriverManager、Connection、Statement、Result、PreparedStatement等。這其中就包含DriverManager。
??一般來說,JDBC 是 Java 數據庫連接中的必用的技術手段,其它延伸出來的 Java 數據庫連接技術都是對包含 JDBC 等技術封裝之后的結果。而 DriverManager 是 JDBC 中建立連接的一個關鍵性的類,具體地說,DriverManager 有一個靜態方法:Connection getConnection(String url, String user, String password) 可直接進行與數據庫的連接。
數據源
??數據源(DataSource)是一種升級版的 DriverManager。之所以需要這種升級版,原因是 DriverManager 過于底層。數據源可以由連接池作為實現,用以減少連接數據庫時所帶來的消耗。DataSource 位于 javax.sql.DataSource (不是 java.sql.DataSource)。從代碼邏輯來講,DataSource 與 DriverManage 幾乎是等同的,DataSource 同樣有一個類似的方法 Connection getConnection(...)。
JNDI
??JNDI 全稱 Java Naming and Directory Interface,譯為 Java 命名和目錄接口。一般說 JNDI 也指包名前綴為 Javax.naming 的包的內容。雖然有了 DataSource,但是僅僅使用 DataSource 仍然要在 Java 代碼中添加大量的配置代碼。這種情況下,JNDI 應運而生。使用 JNDI,就可以將一些配置信息使用文本語言(如 xml)來描述,并存放到別處,這些就能實現解耦。比如說,JNDI 中的l ookup 方法可以接收一個配置文件作參數,返回一個可以強制轉換為 DataSource 類型的對象,然后就可以使用 DataSource 進行與數據庫的連接。
連接池
??技術的發展永無止境。雖然有了上面的技術,然而這尚未解決頻繁關閉數據庫連接帶來的損耗的問題。
??關于為什么需要使用連接池,可以參考筆者舉的這個例子。把完成一次涉及數據庫的操作看成去餐廳吃一次飯。原始的數據庫連接方式相當于吃飯時使用的是一次性餐具。雖然一次性餐具對吃飯沒有顯著的壞處,但使用一次性餐具畢竟還有購買一次性餐具、用完后處理一次性餐具的問題。如果對于人很多、吃飯時間高度集中的學校來講,還有更好的方法,那就是使用可重復利用的餐具。這樣一來,很多個人吃飯也可以輪流使用同一套餐具,這就節約了資源。
??連接池是用于高效管理數據庫連接。它可以在合適的時機建立、釋放連接,其作用類似于虛擬機對內存的管理。具體來說,當程序需要進行數據庫連接時,系統會一次性地創建多個數據庫連接,并保存在連接池中。然后讓該程序使用連接池的其中一個連接。當該程序不再需要數據庫連接時,并不釋放這個數據庫連接,而是繼續保留在連接池中供未來某程序使用。因此,這種方式避免了頻繁地建立與釋放數據庫連接所帶來的不必要損耗。
??常見的連接池有:
- Hibernate 使用的 C3P0、Proxool 等。
總結
以上是生活随笔為你收集整理的JDBC、DriverManage、JNDI、数据源(DataSource)、连接池的区别的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Java官方相关资源文件的获取教程
- 下一篇: MySQL 下载与配置教程(免安装版)