jdbc連接數據scanip_JDBC連接數據庫的四種方式:DriverManager,DataSource,DBCP,C3P0

方法1:使用java.sql.DriverManager類

驅動管理器類,用于管理所有注冊的驅動程序。

(注:DataSource 接口是 JDBC 2.0 API 中的新增內容,它提供了連接到數據源的另一種方法。使用 DataSource 對象是連接到數據源的首選方法。)

常用的兩個API

registerDriver(driver)? : 注冊驅動類對象

ConnectiongetConnection(url,user,password);? 獲取連接對象

@Test

public void test1(){

Statement stmt = null;

Connection conn = null;

try {

//1.驅動注冊程序 --內部執行了RegisterDriver

Class.forName("com.mysql.jdbc.Driver");

//2.獲取連接對象

conn = DriverManager.getConnection(url, user, password);

//3.創建Statement

stmt = conn.createStatement();

//4.準備sql

String sql = "CREATE TABLE student(id INT PRIMARY KEY AUTO_INCREMENT,NAME VARCHAR(20),gender VARCHAR(2))";

//5.發送sql語句,執行sql語句,得到返回結果

int count = stmt.executeUpdate(sql);

//6.輸出

System.out.println("影響了"+count+"行!");

} catch (Exception e) {

e.printStackTrace();

throw new RuntimeException(e);

} finally{

//7.關閉連接(順序:后打開的先關閉)

if(stmt!=null)

try {

stmt.close();

} catch (SQLException e) {

e.printStackTrace();

throw new RuntimeException(e);

}

if(conn!=null)

try {

conn.close();

} catch (SQLException e) {

e.printStackTrace();

throw new RuntimeException(e);

}

}

}

方法2:使用實現了javax.sql.DataSource接口的子類

javax.sql.DataSource接口

包名:javax.sql

接口名: DataSource

作為 DriverManager 工具的替代項,DataSource 對象是獲取連接的首選方法。DataSource接口由驅動程序供應商實現。共有三種類型的實現:

1. 基本實現 - 生成標準的 Connection 對象

2. 連接池實現 - 生成自動參與連接池的 Connection 對象。此實現與中間層連接池管理器一起使用。

3. 分布式事務實現 - 生成一個 Connection 對象,該對象可用于分布式事務,大多數情況下總是參與連接池。此實現與中間層事務管理器一起使用,大多數情況下總是與連接池管理器一起使用。

自己實現DataSource子類這種方法不常用,常用的方法可以參考方法3和方法4

插入一句:Sun公司約定:如果是連接池技術,都需要實現javax.sql.DataSource接口

方法3:DBCP連接池

DBCP 是 Apache 軟件基金組織下的開源連接池實現,使用DBCP數據源,應用程序應在系統中增加如下兩個 jar 文件:

Commons-dbcp.jar:連接池的實現

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

Tomcat 的連接池正是采用該連接池來實現的。該數據庫連接池既可以與應用服務器整合使用,也可由應用程序獨立使用。

核心類:BasicDataSource

包名:org.apache.commons.dbcp

類名:ClassBasicDataSource extends Object implements DataSource

Basicimplementation of javax.sql.DataSource that is configured via

JavaBeansproperties. This is not the only way to combine the

commons-dbcp andcommons-pool packages, but provides a "one stop

shopping" solutionfor basic requirements.

2. 兩種方式實現連接池

1)硬編碼方式

2)配置方式

public class App_DBCP {

// 1. 硬編碼方式實現連接池

@Test

public void testDbcp() throws Exception {

// DBCP連接池核心類

BasicDataSource dataSouce = new BasicDataSource();

// 連接池參數配置:初始化連接數、最大連接數 / 連接字符串、驅動、用戶、密碼

dataSouce.setUrl("jdbc:mysql:///jdbc_demo");//數據庫連接字符串

dataSouce.setDriverClassName("com.mysql.jdbc.Driver"); //數據庫驅動

dataSouce.setUsername("root");//數據庫連接用戶

dataSouce.setPassword("root"); //數據庫連接密碼

dataSouce.setInitialSize(3); // 初始化連接

dataSouce.setMaxActive(6); // 最大連接

// 獲取連接

Connection con = dataSouce.getConnection();

con.prepareStatement("delete from admin where id=3").executeUpdate();

// 關閉

con.close();

}

@Test

// 2. 【推薦】配置方式實現連接池, 便于維護

public void testProp() throws Exception {

// 加載prop配置文件

Properties prop = new Properties();

// 獲取文件流

InputStream inStream = App_DBCP.class.getResourceAsStream("db.properties");

// 加載屬性配置文件

prop.load(inStream);

// 根據prop配置,直接創建數據源對象

DataSource dataSouce = BasicDataSourceFactory.createDataSource(prop);

// 獲取連接

Connection con = dataSouce.getConnection();

con.prepareStatement("delete from admin where id=4").executeUpdate();

// 關閉

con.close();

}

}

配置方式實現DBCP連接池,? 配置文件中的key與BaseDataSouce中的屬性一樣:

db.properties

url=jdbc:mysql:///jdbc_demo

driverClassName=com.mysql.jdbc.Driver

username=root

password=root

initialSize=3

maxActive=6

方法4:C3P0連接池

C3P0連接池:

最常用的連接池技術!Spring框架,默認支持C3P0連接池技術!

C3P0連接池,核心類:

CombopooledDataSource ds;

包名:com.mchange.v2.c3p0

類名:ClassComboPooledDataSource? implementsPooledDataSource implements DataSource

使用:

1.??????下載,引入jar文件:? c3p0-0.9.1.2.jar

2.??????使用連接池,創建連接

a)????????硬編碼方式

b)????????配置方式(xml)

自動加載src下c3p0的配置文件【c3p0-config.xml】

public class App {

@Test

//1. 硬編碼方式,使用C3P0連接池管理連接

public void testCode() throws Exception {

// 創建連接池核心工具類

ComboPooledDataSource dataSource = new ComboPooledDataSource();

// 設置連接參數:url、驅動、用戶密碼、初始連接數、最大連接數

dataSource.setJdbcUrl("jdbc:mysql://localhost:3306/jdbc_demo");

dataSource.setDriverClass("com.mysql.jdbc.Driver");

dataSource.setUser("root");

dataSource.setPassword("root");

dataSource.setInitialPoolSize(3);

dataSource.setMaxPoolSize(6);

dataSource.setMaxIdleTime(1000);

// ---> 從連接池對象中,獲取連接對象

Connection con = dataSource.getConnection();

// 執行更新

con.prepareStatement("delete from admin where id=7").executeUpdate();

// 關閉

con.close();

}

@Test

//2. XML配置方式,使用C3P0連接池管理連接

public void testXML() throws Exception {

// 創建c3p0連接池核心工具類

// 自動加載src下c3p0的配置文件【c3p0-config.xml】

ComboPooledDataSource dataSource = new ComboPooledDataSource();// 使用默認的配置

// 獲取連接

Connection con = dataSource.getConnection();

// 執行更新

con.prepareStatement("delete from admin where id=5").executeUpdate();

// 關閉

con.close();

}

}

總結:

DataSource 接口是 JDBC 2.0 API 中的新增內容,它提供了連接到數據源的另一種方法。使用 DataSource 對象是連接到數據源的首選方法。

DataSource比DriverManager好在哪里呢?

1. DataSource創建的connection既有基本實現,也有連接池實現(可以復用,DataSource幫我們實現了復用機制),而DriverManager創建的connection則不能復用(當然自己寫連接池,自己來實現復用機制也是可以的,可以參考:使用動態代理實現自定義連接池)。所以sun公司規定連接池技術需要實現DataSource接口。

2. DataSource中封裝了DriverManager的使用,使用DataSource的一個好處是可以在外邊配置(如C3P0直接修改xml文件,不用自己寫配置文件db.properties)。

3. 配置DataSource,由容器來獲取Connection并結合連接池的應用比直接使用DriverManager操作JDBC效率高一些(參考:DBCP vs DriverManage效率)。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/533297.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/533297.shtml
英文地址,請注明出處:http://en.pswp.cn/news/533297.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

HTML下拉菜單怎么做成橫向,css導航條橫向帶下拉菜單

cssdiv導航下拉二級菜單豎排效果如何改為橫排?,在“下一站”有三個二級豎排菜單,如何能變為橫排?困擾了我一天了,讓二級菜單變成一行,只需要在豎排的效果上,讓二級菜單都浮動起來,這…

java移動端接口測試_使用java如何進行接口測試

關于接口測試, 我們之前介紹過很多方法了, 有postman, soapUI, Jmeter等, 他們各有優勢和劣勢, 今天和大家分享的是如何用java TestNG來實現接口測試.開始測試之前需要如下準備工作:1. IDE環境, Intellij 或者eclipse, 個人推薦使用Intellij.2. JKD1.8 以上3. Maven 環境 Maven…

html5折疊卡片,基于HTML5折疊卡片式下拉菜單代碼

基于HTML5折疊卡片式下拉菜單代碼。這是一款基于jQueryCSS3HTML5實現的下拉列表框特效代碼。效果圖如下:實現的代碼。hmtl代碼:愛編程愛編程 jQuery特效 CSS3特效 HTML5特效 音效下載 flash動畫js代碼:(function ($) {var cards $(.card-dro…

fastexcel讀取excel追加寫入sheet頁_python筆記52:python操作excel

主要內容:小目標:掌握excel模塊主要內容:excel相關模塊,openpyxl安裝使用如果看完這篇文章,你還是弄不明excel相關操作; 你來找我,我保證不打你,我給你發100的大紅包。1. excel相關操…

HTML音樂播放沒聲音,網頁沒有聲音但系統顯示有聲音怎么回事?如何解決?

網友提問:為什么網頁沒有聲音,除了迅雷高清在線影院的視頻有聲音和本已經下載的歌或視頻有聲音外,其他網頁都沒有聲音!就是網頁沒聲音,其他一切正常!網頁沒有聲音但系統顯示有聲音;網頁在線視頻…

html層次選擇器例題,詳解強大的jQuery選擇器之基本選擇器、層次選擇器

jQuery允許開發者使用從CSS1到CSS3幾乎所有的選擇器,以及jQuery獨創的高級而復雜的選擇器。另外還可以加入插件使其支持XPath選擇器,甚至開發者可以編寫屬于自己的選擇器(即選擇器插件,參考上篇:jQuery插件原來如此簡單——jQuery…

cesium 經緯度繪制點_炫酷大屏地圖自定義繪制(一)

現在數據中臺的概念炒的火熱,那在收集到數據后就要想辦法去設計大屏,可視化展現。往往大屏都會涉及到地理位置的顯示。對于常見的省市區,網上都已經提供了地理json數據,那對于需要定制化的我們要怎么處理呢?首先我們還…

關于python語言和人工智能下哪個說法不正確_“在資源管理器”窗口中,文件夾圖標左側有“...

【單選題】表示串行數據傳輸速率的指標為:___。【單選題】串行口工作在方式0時,其波特率:___。【簡答題】發布混合堿含量的測定三個錐形瓶的滴定終點顏色【簡答題】將自己做的三個錐形瓶的滴定終點顏色拍照發上來(三個瓶子并排擺在白色托盤中)【單選題】Guido van Rossum正式對…

html瞄點四大名著有圖片,四大名著手抄報圖片圖和文字資料

四大名著之【三國演義】羅貫中(1330年一1400年之間),名本,號湖海散人,明代通俗小說家。他的籍貫一說是太原(今山西),一說是錢塘(今浙江杭州),不可確考。據傳說,羅貫中曾充任過元末農民起義軍張士誠的幕客&a…

shell181網格劃分_ANSYS軟件中SHELL181單元參數詳解(1)

SHELL181單元說明SHELL181單元適合對薄的到具有一定厚度的殼體結構進行分析。它是一個4結點單元,每個結點具有6個自由度:x,y,z方向的位移自由度和繞X,Y,Z軸的轉動自由度。(如果應用了薄膜選項的話,那該單元則只有移動自由度了)。簡并三角形選…

怎樣查詢2021高考模擬成績,2021年高三一模二模三模哪個成績更接近高考成績,看看網友是怎么評論...

2021年高三一模二模三模哪個成績更接近高考成績雖然大多數人認為一模的成績最接近高考,基本定型了,但高考變幻莫測,成績很有可能發生變化,成績升降都是很難說的。高三一模之后成績也沒有定型,還有最后逆轉的機會。高考…

lisp 標記形心_標記-整理算法

定義該算法分為標記和整理兩個階段,標記階段會遍歷并標記活動對象,整理階段通過數次搜索堆來重新裝填活動對象,它們聚集到了堆的一端。lisp2算法forwarding指針表示活動對象的目標地址過程概要初始狀態標記結束后整理結束后整理階段偽代碼com…

js遍歷json數組給html td賦值,JS實現給json數組動態賦值的方法示例

關注微信公眾號JS實現給json數組動態賦值的方法示例轉載 更新時間:2017年07月04日 10:19:00 作者:小魏的馬仔這篇文章主要介紹了JS實現給json數組動態賦值的方法,結合實例形式分析了javascript針對json數組的遍歷、賦值等常用操作技巧,需要的朋友可以…

甘肅民族師范學院計算機科學系,甘肅民族師范學院計算機科學與技術專業2016年在甘肅理科高考錄取最低分數線...

類似問題答案衡陽師范學院計算機科學與技術專業2016年在甘肅理科高考錄取最低分數線學校 地 區 專業 年份 批次 類型 分數 衡陽師范學院 甘肅 計算機科學與技術 2016 二批 理科 448 學校 地 區 專業 年份 批次 類型 分數 衡陽師范學院 甘肅 計算機科學與技術 2016 二批 理科 44…

python面試題百度云下載_分享三道Python經典面試題

該樓層疑似違規已被系統折疊 隱藏此樓查看此樓驗證郵箱格式驗證郵箱的格式,不同語言的實現大同小異,通過正則表達式是最快捷的匹配方式,但對于不熟悉正則的同學看著一長串匹配符還是比較頭痛的,其實也沒那么恐怖。熟悉python 中正…

計算機科學與技術專業實習招聘,中科院研究生院招聘GIS或計算機專業實習生

中科院研究生院招聘GIS或計算機專業實習生由于項目需要,中科院研究生院特招聘GIS或計算機方向實習生,具體要求如下:項目名稱:油氣田WebGIS系統招聘人數:1人(目前已有1人)主要工作是根據油氣田生產需要,實現WebGIS支持下…

r語言regexpr函數_R語言學習筆記-文本挖掘之字符處理(1)

在挖掘分析的過程當中對字符串的處理是極為重要的,且出現也較為頻繁,R語言作為當前最為流行的開源數據分析和可視化平臺,雖然文本的處理并不是它的強項, 但是R語言還是包含大量的字符串操作工具,本章著重整理了部分常用字符處理函…

html div如何列對其,CSS:自適應N列布局如何解決兩端對齊

關于每行N列的這種布局,存在一個兩端對齊的問題,因為每一列都會存在一個margin-left或者margin-right,導致最后一個超出父元素的邊界。通過一番努力,終于解決了這個遺留很久的問題,廢話不多說,先看做完之后…

v380智能快配連接不上怎么辦_Win7系統電腦設置連接遠程桌面的操作方法

Win7系統電腦遠程桌面無法連接怎么辦?Win7怎么設置連接遠程桌面?請看下文具體操作步驟。一般情況下,對Win7的遠程連接只需要5步即可完成遠程連接的設置:1)查詢并記錄遠程計算機的IP,開始——運行——輸入cmd&#xff0…

計算機專業買win,新買的電腦是win10系統,有的人卻費盡心思重裝成win7,為什么呢...

簡單地說,現在的新電腦幾乎都是最新的windows系統,而廠商通常預裝的是windows10家庭版,雖說沒有多強的功能,但也能夠滿足我們日常使用的需求。重要的是預裝的win10系統是正版的!但不難發現,即便是正版的win…