DataSource--DBCP--C3P0--DBUtils
一.DataSource 接口(javax.sql)
???? 1.連接池:
???????? 由于與數據庫連接的創建和銷毀非常占用資源,因此提出了連接池技術,用于提升java程序操作數據庫的性能;連接池是創建和管理一個連接的緩沖池的技術,這些連接準備好被任何需要它們的線程使用。
???? 2.介紹:DataSource是java提供的一個接口,規范著所有的想寫連接池的人需要做的事情;具體的連接池都需要實現該接口;程序員可以面向Datasource操作具體的連接池對象;
???? 3.定義:public interface DataSource extends CommonDataSource, Wrapper
???? 4.常用方法:只有一個getConnection()
???????? Connection getConnection() throws SQLException{}: Attempts to establish a connection with the data source that this
???????????? DataSource object represents.
???????? Connection getConnection(String username,String password) throws SQLException{}:
???? 5.具體的連接池實現技術主要有兩類:DBCP和C3P0
二.DBCP--(DataBase Connection Pool)
???? 1.介紹:
???? 數據庫連接池,是java數據庫連接池的一種,由Apache開發,通過數據庫連接池,可以讓程序自動管理數據庫連接的創建。
???? 2.使用步驟:
???????? 1):下載并解壓zip;(DBCP有兩個zip文件)
???????? 2):復制核心的jar包到工程中;(commons-dbcp-1.4.jar,? commons-pool-1.5.6.jar)
???????? 3):添加到本地;
???????? 4):復制配置文件到src目錄下;并修改配置文件的信息;(該配置文件的名稱和位置可以任意)
???????? 5):使用核心類;
???? 3.核心類介紹:BasicDataSourceFactory
???????? 定義:public class BasicDataSourceFactory extends Object implements ObjectFactory
???????? 構造方法:只有一個空參構造
???????????? public BasicDataSourceFactory()
???????? 常用方法:
???????????? public static DataSource createDataSource(Properties properties) throws Exception{}:
???????????? 注意參數為Properties類的實例化對象,返回值為DataSource;
???? 4.自定義DBCP工具類:配置文件("dbcp.properties")需放在工程根目錄下;
???
三.C3P0
???? 1.介紹:
???? C3P0是一個開源的JDBC連接池,它實現了數據源和JNDI綁定,支持JDBC3規范和JDBC2的標準擴展。目前使用它的開源項目有Hibernate,Spring等。c3p0與dbcp區別:c3p0有自動回收空閑連接功能,dbcp做不到.
???? 2.使用步驟:
???????? 1):下載并解壓zip;
???????? 2):復制核心jar包到工程中即可:c3p0-0.9.1.2.jar;
???????? 3):添加到本地;
???????? 4):復制配置文件必須到src目錄下,且配置文件的名稱(c3p0-config.xml)不能改變;
???????? 5):直接創建ComboPooledDataSource核心類對象即可使用;
???? 3.核心類 ComboPooledDataSource 類(com.mchange.v2.c3p0)
???????? 定義:public final class ComboPooledDataSource extends com.mchange.v2.c3p0.impl.AbstractPoolBackedDataSource
???????????????????????????????????????????????????? implements PooledDataSource, java.io.Serializable, javax.naming.Referenceable
????????????? public interface PooledDataSource extends javax.sql.DataSource
????
???????????????? ComboPooledDataSource類實現了PooledDataSource接口,該接口繼承了DataSource接口;
???????? 構造方法:
???????????????? public ComboPooledDataSource()
???????? 配置文件選項(補充):???????????????????????????????
??? 4.自定義C3P0工具類:導入包:mysql-connector-java-5.1.39-bin.jar,c3p0-0.9.1.2.jar
???
四.DBUtils--工具類,commons-dbutils-1.6.jar
???? 1.概述:Commons DbUtils是Apache組織提供的一個對JDBC進行簡單封裝的開源工具類庫,使用它能夠簡化JDBC應用程序的開發,同時也不會影響程序的性能。
???? 2.使用步驟:
???????? 1):下載并解壓zip;
???????? 2):復制核心jar包到工程中即可:commons-dbutils-1.6.jar;?
???????? 3):添加到本地;
???????? 4):直接創建核心類對象即可使用;
???? 3.核心類3個:
???????? 1):QueryRunner,用于封裝sql執行對象;
???????? 2):ResultSetHandler用于封裝ResultSet;
???????? 3):DButils, 用于事務的控制;
???? 4.QueryRunner
???????? 定義:public class QueryRunner extends AbstractQueryRunner
???????? 構造方法:
???????????? public QueryRunner()
???????????? public QueryRunner(DataSource ds)
???????? 常用方法:
???????? public <T> T query(Connection conn, String sql, ResultSetHandler<T> rsh, Object... params)throws SQLException{}:
???????? public <T> T query(String sql, ResultSetHandler<T> rsh, Object... params)throws SQLException{}:
????????
???????? public int update(Connection conn, String sql, Object... params)throws SQLException{}:Execute an SQL INSERT, UPDATE, or DELETE query.返回值為數據表里受影響的行數(int類型);
???????? public int update(String sql, Object... params)throws SQLException{}:Executes the given INSERT, UPDATE, or DELETE SQL statement. The Connection is retrieved from the DataSource set in the constructor. This Connection must be in auto-commit mode or the update will not be saved.
???? 5.ResultSetHandler
???????? 定義:public interface ResultSetHandler<T>
???????? 子類:根據取出數據的不同選擇不同的容器接收.前三個較為常用.
???????????? BeanHandler:將結果集中第一條記錄封裝到一個指定的javaBean中.
???????????? BeanListHandler:將結果集中每一條記錄封裝到指定的javaBean中,將這些javaBean在封裝到List集合中.
???????????? ScalarHandler:它是用于單個數據。例如select count(*) from 表操作.
???????????? ArrayHandler:將結果集中的第一條記錄封裝到一個Object[]數組中,數組中的每一個元素就是這條記錄中的每一個字段的值.
???????????? ArrayListHandler:將結果集中的每一條記錄都封裝到一個Object[]數組中,將這些數組在封裝到List集合中.
???????????? ColumnListHandler:將結果集中指定的列的字段值,封裝到一個List集合中.
???????????? MapHandler:將結果集中第一條記錄封裝到了Map<??? String,Object>集合中,key就是字段名稱,value就是字段值.
???????????? MapListHandler:將結果集中每一條記錄封裝到了Map<String,Object>集合中,key就是字段名稱,value就是字段值,在將這些Map封裝到List集合中.
???????????? KeyedHandler:將結果集中每一條記錄封裝到Map<String,Object>,在將這個map集合做為另一個Map的value,另一個Map集合的key是指定的字段的值.
??? 6.DbUtils
???????? 定義:public final class DbUtils extends Object
???????? 構造方法:public DbUtils()
???????? 靜態方法:
???????? public static void close(Connection conn/ResultSet rs/Statement stmt)throws SQLException{}:此方法有重載(共3個),可以關閉Connection/Statement/ResultSet.
???????? public static void closeQuietly(Connection conn,Statement stmt,ResultSet rs){}:關閉資源,避免異常,此方法有重載(共4個),可以一次關閉3個,也可以分別關閉.
??????? public static void commitAndClose(Connection conn)throws SQLException{}:Commits a Connection then closes it, avoid closing if null.
???????? public static void commitAndCloseQuietly(Connection conn){}:Commits a Connection then closes it, avoid closing if null and hide any SQLExceptions that occur.
??????? public static boolean loadDriver(ClassLoader classLoader,String driverClassName){}:Loads and registers a database driver class. If this succeeds, it returns true, else it returns false.有重載,可以直接傳入driverClassName.
??????? public static void rollback(Connection conn)throws SQLException{}:Rollback any changes made on the given connection.
???????? public static void rollbackAndClose(Connection conn)throws SQLException{}:Performs a rollback on the Connection then closes it, avoid closing if null.
???????? public static void rollbackAndCloseQuietly(Connection conn){}:Performs a rollback on the Connection then closes it, avoid closing if null and hide any SQLExceptions that occur.
???? 7.代碼演示:導包mysql-connector-java-5.1.39-bin.jar,commons-dbutils-1.6.jar,c3p0-0.9.1.2.jar(使用了前面自定義的MyC3P0工具類)
轉載于:https://www.cnblogs.com/huguangqin/p/7134430.html
總結
以上是生活随笔為你收集整理的DataSource--DBCP--C3P0--DBUtils的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: C# 页面调用控制台应用程序
- 下一篇: [Mysql]备份同库中一张表的历史记录