日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

DataSource--DBCP--C3P0--DBUtils

發布時間:2024/4/14 编程问答 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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")需放在工程根目錄下;
???

1 //需要首先導入包:mysql-connector-java-5.1.39-bin.jar(mysql驅動),commons-dbcp-1.4.jar,commons-pool-1.5.6.jar 2 import java.io.FileInputStream; 3 import java.sql.Connection; 4 import java.sql.SQLException; 5 import java.util.Properties; 6 import javax.sql.DataSource; 7 import org.apache.commons.dbcp.BasicDataSourceFactory; 8 9 public class MyDBCPUtils { 10 private static DataSource ds = null; 11 //使用靜態代碼塊技術初始化ds對象(成員變量) 12 static { 13 // 獲取DataSource 14 try { 15 FileInputStream in = new FileInputStream("dbcp.properties"); 16 Properties p = new Properties(); 17 p.load(in); 18 ds = BasicDataSourceFactory.createDataSource(p);//面向DBCP核心類,調用createDataSource()方法,返回DataSource 19 } catch (Exception e) { 20 e.printStackTrace(); 21 } 22 } 23 // 獲取Connection 24 public static Connection getConnection() { 25 Connection c = null; 26 try { 27 c = ds.getConnection(); 28 } catch (SQLException e) { 29 e.printStackTrace(); 30 } 31 return c; 32 } 33 }
三.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
???

1 /*配置文件必須到src目錄下,且配置文件的名稱(c3p0-config.xml)不能改變,程序中不會出現,但是會自動讀取. 2 如果報超時錯誤,有可能是1.包沒導入/2.文件沒找到/3.數據庫服務未開啟*/ 3 4 import java.sql.Connection; 5 import javax.sql.DataSource; 6 import com.mchange.v2.c3p0.ComboPooledDataSource; 7 8 public class MyC3P0Utils { 9 // 定義DataSource 10 private static DataSource ds = new ComboPooledDataSource(); // 多態,子類實例賦值給父類的父類 11 12 // 獲取Connection 13 public static Connection getConnection() throws Exception { 14 Connection c = ds.getConnection(); 15 return c; 16 } 17 // 返回連接池對象 18 public static DataSource getDataSource() { 19 return ds; 20 } 21 } 22

四.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工具類)

1 //定義一個類,要使用到BeanHandler類 2 public class Vegetables { 3 private int id; 4 private String name; 5 //空參構造--Eclipse快捷鍵:alt+shift+c 6 public Vegetables() { 7 super(); 8 } 9 //滿參構造--Eclipse快捷鍵:alt+shift+o 10 public Vegetables(int id, String name) { 11 super(); 12 this.id = id; 13 this.name = name; 14 } 15 //覆寫toString--Eclipse快捷鍵alt+shift+s 16 @Override 17 public String toString() { 18 return "Vegetables [id=" + id + ", name=" + name + "]"; 19 } 20 //getter/setter--Eclipse快捷鍵alt+shift+r 21 public int getId() { 22 return id; 23 } 24 public void setId(int id) { 25 this.id = id; 26 } 27 public String getName() { 28 return name; 29 } 30 public void setName(String name) { 31 this.name = name; 32 } 33 } 34 35 import huguangqin.com.cnblogs_MyC3P0Utils.MyC3P0Utils;//使用了前面自定義的工具類 36 import java.util.List; 37 import org.apache.commons.dbutils.QueryRunner; 38 import org.apache.commons.dbutils.handlers.BeanHandler; 39 import org.apache.commons.dbutils.handlers.BeanListHandler; 40 import org.apache.commons.dbutils.handlers.ScalarHandler; 41 42 public class Demo { 43 @SuppressWarnings("all")//壓制黃線警告 44 public static void main(String[] args) throws Exception { 45 // 獲取QueryRunner對象 46 QueryRunner qr = new QueryRunner(MyC3P0Utils.getDataSource()); 47 // 插入數據 48 String inertSQL = "INSERT INTO dbutil(id,name) VALUES(?,?)"; 49 int i1 = qr.update(inertSQL, null, "白菜"); 50 int i2 = qr.update(inertSQL, null, "豆腐"); 51 int i3 = qr.update(inertSQL, null, "磨菇"); 52 System.out.println(i1 + i2 + i3); 53 54 // 修改 55 String updateSQL = "UPDATE dbutil SET name = ? WHERE id = 1"; 56 int i4 = qr.update(updateSQL, "小白菜"); 57 System.out.println(i4); 58 59 // 查詢1--ScalarHandler 60 String querySQL = "SELECT name FROM dbutil WHERE name Like '___'"; 61 // 定義容器接收 ScalarHandler 62 ScalarHandler sh = new ScalarHandler(); 63 String s = qr.query(querySQL, sh); 64 System.out.println(s);// 只返回一個值 65 66 // 查詢2--BeanHandler 67 String querySQL2 = "SELECT * FROM dbutil"; 68 BeanHandler bh = new BeanHandler(Vegetables.class); 69 Vegetables v = qr.query(querySQL2, bh); 70 System.out.println(v);// 只返回一個實例對象 71 72 // 查詢3--BeanListHandler 73 BeanListHandler blh = new BeanListHandler(Vegetables.class); 74 List<Vegetables> list = qr.query(querySQL2, blh);// 返回List 75 for (Vegetables v1 : list) { 76 System.out.println(v1); 77 } 78 // 刪除 79 String deleteSQL = "DELETE FROM dbutil"; 80 int i5 = qr.update(deleteSQL); 81 System.out.println(i5); 82 } 83 } 84

轉載于:https://www.cnblogs.com/huguangqin/p/7134430.html

總結

以上是生活随笔為你收集整理的DataSource--DBCP--C3P0--DBUtils的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。