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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

四种连接数据库的方法(DriverManager、DataSource子类、DBCP、c3p0)

發布時間:2024/9/16 数据库 74 豆豆
生活随笔 收集整理的這篇文章主要介紹了 四种连接数据库的方法(DriverManager、DataSource子类、DBCP、c3p0) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

四種連接數據庫的方法(DriverManager、DataSource子類、DBCP、c3p0)???

一、環境?
???1、數據庫驅動jar文件????

2、DBCP方法?
Commons-dbcp.jar:連接池的實現?Commons-pool.jar:連接池實現的依賴庫?資源文件?
???3、c3p0方法:?c3p0-0.9.1.2.jar?
配置文件:c3p0-config.xml?二、連接操作?1.DriverManager方法;?import?java.sql.Connection;???

package?demo.jdbcpool.test1; import?java.sql.Connection; import?java.sql.DriverManager; import?java.sql.SQLException; public?class?DBConnection?{private?static?String?driverClass?=?"com.mysql.jdbc.Driver";private?static?String?url?=?"jdbc:mysql://localhost:3306/test";private?static?String?username?=?"root";private?static?String?password?=?"123456";private?static?Connection?conn?=?null;static?{try?{//?注冊驅動//?不要把conn?=?DriverManager.getConnection(url,?username,?password);//?放在這里。防止所有用戶都用一個ConnectionClass.forName(driverClass);}?catch?(Exception?e)?{throw?new?RuntimeException(e);}}public?static?Connection?getConnection()?throws?SQLException?{conn?=?DriverManager.getConnection(url,?username,?password);return?conn;} }

??
2.使用DataSource子類方法;?

資源文件DBConnection.properties????

driverClass?=?com.mysql.jdbc.Driver???? url?=?jdbc:mysql://localhost:3306/test?? username?=?root???? password?=?123456

?
模擬數據連接池?

DataSourcePool.java?? package?cn.langzi.jdbc.DataSource;? import?java.io.InputStream;??????? import?java.io.PrintWriter;? import?java.lang.reflect.InvocationHandler;???????? import?java.lang.reflect.Method;???????? import?java.lang.reflect.Proxy;???????? import?java.sql.Connection;???????? import?java.sql.DriverManager;???????? import?java.sql.SQLException;???????? import?java.util.LinkedList;???????? import?java.util.Properties;???????? import?javax.sql.DataSource;???????? import?javax.sql.DataSource;?public?class?DataSourcePool?implements?DataSource?{?private?static?String?url?=?null;?????????private?static?String?username?=?null;????????private?static?String?password?=?null;?????private?static?int?size?=?10;?????private?static?LinkedList<Connection>?list?=?new?LinkedList<Connection>();????????? static{try?{?????????????????InputStream?in?=?DataSourcePool.class.getClassLoader()???????????????????????.getResourceAsStream???????("cn/langzi/jdbc/DataSource/DBConnection.properties");??????????????Properties?prop?=?new?Properties();???????????????????prop.load(in);????????????????Class.forName(prop.getProperty("driverClass"));?????????????????url?=?prop.getProperty("url");?????????????????username?=?prop.getProperty("username");?????????????????password?=?prop.getProperty("password");????????????????}?catch?(Exception?e)?{????????????????????throw?new?ExceptionInInitializerError(e);??????????????????}?????????}?????????private?static?DataSourcePool?pool?=?new?DataSourcePool();????????????//創建對象就初始化size個數據庫連接????????private?DataSourcePool(){?????????????for(int?i=0;i<size;i++){try?{???????????????????Connection?conn?=?DriverManager.getConnection(url,?username,?password);???????????????????System.out.println(conn);?????????????????????????list.add(conn);???????????????????}?catch?(SQLException?e)?{??????????????????????????????e.printStackTrace();}? }

?

DataSource有兩種實現方式

1.直連數據庫方式?
1.當調用DataSource.getConnection()時,其實它調用的是DriverManager.getConnection(url, user, password)來獲取一個Connection,Connection使用完后被close,斷開與數據庫的連接,我們稱這總方式是直連數據庫,因為每次都需要重新建立與數據庫之間的連接,而并沒有把之前的Connection保留供下次使用.


2.池化連接方式?
1.可以說這種方式就是使用了連接池技術.DataSource內部封裝了一個連接池,當你獲取DataSource的時候,它已經敲敲的與數據庫建立了多個Connection,并將這些Connection放入了連接池,此時調用DataSource.getConnection()它從連接池里取一個Connection返回,Connection使用完后被close,但這個close并不是真正的與數據庫斷開連接,而是告訴連接池"我"已經被使用完,"你"可以把我分配給其它"人"使用了.就這樣連接池里的Connection被循環利用,避免了每次獲取Connection時重新去連接數據庫.
對DataSource的兩種實現方式已經介紹完畢,現在知道DataSource與連接池之間的是關系而不是區別了吧,因為DataSource與連接池根本就不是同一類型的東西,只有同一類型的東西才存在區別,例如:oracle與db2都是數據庫,它們才存在區別.

我們這里僅僅實現了數據庫的鏈接,并沒有池化鏈接

?

總結

以上是生活随笔為你收集整理的四种连接数据库的方法(DriverManager、DataSource子类、DBCP、c3p0)的全部內容,希望文章能夠幫你解決所遇到的問題。

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