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

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程语言 > java >内容正文

java

Java数据库连接协议JDBC学习

發(fā)布時(shí)間:2023/12/20 java 44 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Java数据库连接协议JDBC学习 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

什么是JDBC?

Java的官方文檔是如下描述的

The JDBC API is the industry standard for database-independent connectivity between the Java programming language and a wide range of databases. The JDBC API provides a call-level API for SQL-based database access. JDBC technology allows you to use the Java programming language to exploit "Write Once, Run Anywhere" capabilities for applications that require access to enterprise data.

JDBC API是獨(dú)立的數(shù)據(jù)庫(kù)連接工業(yè)標(biāo)準(zhǔn)協(xié)議,這個(gè)數(shù)據(jù)庫(kù)連接指的是Java編程語(yǔ)言和各種各樣數(shù)據(jù)庫(kù)的連接。JDBC API提供了通過(guò)SQL語(yǔ)言獲取數(shù)據(jù)的一套可調(diào)用接口API。JDBC技術(shù)允許開(kāi)發(fā)者在開(kāi)發(fā)企業(yè)數(shù)據(jù)獲取的應(yīng)用中,使用JAVA語(yǔ)言來(lái)實(shí)現(xiàn)“一次寫(xiě)入,多地運(yùn)行”的能力。

就我的理解而言,JDBC是Java用來(lái)實(shí)現(xiàn)各種各樣數(shù)據(jù)庫(kù)連接的一套標(biāo)準(zhǔn)化接口協(xié)議。JDBC API定義了如何獲取/修改數(shù)據(jù)庫(kù)中的數(shù)據(jù)。由于不同的數(shù)據(jù)庫(kù)操作數(shù)據(jù)的底層協(xié)議不同,因此不同的數(shù)據(jù)庫(kù)廠商會(huì)提供對(duì)應(yīng)的數(shù)據(jù)庫(kù)驅(qū)動(dòng),比如mysql有提供給Java的驅(qū)動(dòng)mysql-connection-java-xxx.jar, oracle有提供給Java的驅(qū)動(dòng)ojdbcxx.jar,sqlserver有提供給Java的驅(qū)動(dòng)sqljdbcxx.jar等等。當(dāng)然,這些數(shù)據(jù)庫(kù)廠商也有提供給其他編程語(yǔ)言的數(shù)據(jù)庫(kù)連接驅(qū)動(dòng),比如mysql提供給c++的驅(qū)動(dòng)mysql-connector-c++-8.0.13-macos10.14-x86-64bit.dmg等等。而這些驅(qū)動(dòng)會(huì)實(shí)現(xiàn)JDBC API,將其轉(zhuǎn)化成對(duì)應(yīng)數(shù)據(jù)庫(kù)協(xié)議,從而實(shí)現(xiàn)了對(duì)數(shù)據(jù)的操作。

JDBC整體架構(gòu)

JDBC API包含兩個(gè)主要的接口集合: 第一個(gè)就是為應(yīng)用寫(xiě)數(shù)據(jù)者提供的JDBC API, 第二個(gè)就是為驅(qū)動(dòng)寫(xiě)數(shù)據(jù)提供的更底層的JDBC驅(qū)動(dòng)API. 應(yīng)用可以通過(guò)JDBC API獲取數(shù)據(jù),通過(guò)基于JAVA JDBC技術(shù)實(shí)現(xiàn)的驅(qū)動(dòng),如下圖所示

左邊這條線路表示驅(qū)動(dòng)會(huì)把JDBC的接口調(diào)用轉(zhuǎn)換成關(guān)系型數(shù)據(jù)庫(kù)所使用的網(wǎng)絡(luò)協(xié)議,允許一個(gè)來(lái)自客戶端機(jī)器的數(shù)據(jù)調(diào)用直接傳遞給對(duì)應(yīng)的關(guān)系型數(shù)據(jù)庫(kù)服務(wù)器,同時(shí)提供內(nèi)部網(wǎng)的解決方案。
右邊這條線路則表示驅(qū)動(dòng)會(huì)將JDBC的調(diào)用轉(zhuǎn)換成中間件供應(yīng)商的協(xié)議,中間件服務(wù)器再將中間件的協(xié)議轉(zhuǎn)換成關(guān)系型數(shù)據(jù)庫(kù)的協(xié)議。中間件提供了對(duì)很多數(shù)據(jù)庫(kù)的連接。

JDBC API

1.Driver接口

在操作數(shù)據(jù)庫(kù)中的數(shù)據(jù)之前,先要加載對(duì)應(yīng)的數(shù)據(jù)庫(kù)驅(qū)動(dòng),如加載mysql對(duì)應(yīng)的數(shù)據(jù)庫(kù)驅(qū)動(dòng)示例代碼如下:Class.forName("com.mysql.jdbc.Driver");

2.Connection接口

加載完驅(qū)動(dòng)后,就要從驅(qū)動(dòng)管理器獲取一個(gè)數(shù)據(jù)庫(kù)的連接,通過(guò)這個(gè)連接完成數(shù)據(jù)庫(kù)的數(shù)據(jù)操作,示例代碼如下:Connection conn =?DriverManager.getConnection("jdbc:mysql://host:port/database", "user", "password");

該接口常用的方法有

  • ?createStatement():創(chuàng)建向數(shù)據(jù)庫(kù)發(fā)送sql的statement對(duì)象。
  • ?prepareStatement(sql) :創(chuàng)建向數(shù)據(jù)庫(kù)發(fā)送預(yù)編譯sql的PrepareSatement對(duì)象。
  • ?prepareCall(sql):創(chuàng)建執(zhí)行存儲(chǔ)過(guò)程的callableStatement對(duì)象。
  • ?setAutoCommit(boolean?autoCommit):設(shè)置事務(wù)是否自動(dòng)提交。
  • ?commit() :在鏈接上提交事務(wù)
  • ?rollback() :在此鏈接上回滾事務(wù)
  • ?close() : 關(guān)閉連接,釋放資源

3. Statement接口

該接口主要用于SQL的執(zhí)行,PreparedStatement和CallableStatement都繼承該接口,這三種用于執(zhí)行SQL語(yǔ)句的接口區(qū)別如下

  • Statement 主要用于簡(jiǎn)單數(shù)據(jù)的查詢,不帶參數(shù)
  • PreparedStatement用于帶參數(shù)的查詢,PreparedStatement對(duì)象比Statement對(duì)象的效率更高,并且可以防止SQL注入,所以一般的應(yīng)用開(kāi)發(fā)都是用此接口來(lái)實(shí)現(xiàn)SQL查詢
  • CallableStatement 用于存儲(chǔ)過(guò)程的查詢

4.?ResultSet接口

主要是SQL查詢結(jié)果的封裝,用來(lái)實(shí)現(xiàn)數(shù)據(jù)的查詢的處理。

DataSource

javax.sql.DataSource接口是JDBC 2.0 API中新出現(xiàn)的接口,該接口提供了另一種獲取數(shù)據(jù)源的方式。在實(shí)際的應(yīng)用開(kāi)發(fā)中更建議使用DataSource來(lái)獲取連接,而不建議通過(guò)DriverManager來(lái)獲取連接。這樣應(yīng)用程序的代碼變得可移植和易于管理,不用在程序里硬編碼數(shù)據(jù)庫(kù)的連接地址。另外,DataSounce對(duì)象可以提供連接池和分布式事務(wù),必要的企業(yè)級(jí)數(shù)據(jù)計(jì)算,而這些功能的具體實(shí)現(xiàn)對(duì)于應(yīng)用開(kāi)發(fā)者來(lái)說(shuō)是透明的。

JNDI數(shù)據(jù)源

應(yīng)用程序常常部署在服務(wù)器中,如Tomcat這樣的Web容器。這些服務(wù)器允許開(kāi)發(fā)人員配置通過(guò)JNDI來(lái)獲取數(shù)據(jù)源,這樣的好處是數(shù)據(jù)源完全在應(yīng)用程序之外進(jìn)行管理,應(yīng)用程序只要專注于數(shù)據(jù)的操作就好了。其次,這些應(yīng)用服務(wù)器通常是以數(shù)據(jù)池的形式管理數(shù)據(jù)源,從而具備更好的性能。如下圖所示(來(lái)自https://blog.csdn.net/zhanglf02/article/details/76726702),Web服務(wù)器上保存著一個(gè)數(shù)據(jù)庫(kù)的多個(gè)連接。一個(gè)數(shù)據(jù)源dataSource的配置對(duì)應(yīng)一個(gè)數(shù)據(jù)池。每個(gè)配置的DataSource被綁定在了JNDI樹(shù)上(每個(gè)dataSource的配置都有一個(gè)唯一名稱與之對(duì)應(yīng))客戶端通過(guò)名稱找到在JNDI樹(shù)上綁定的DataSource,再由DataSource找到一個(gè)連接。

主要的開(kāi)源的數(shù)據(jù)源連接池(https://blog.csdn.net/qq_25406669/article/details/80222376)

  • DBCP框架
  • C3P0框架
  • Druid框架

DBCP是由Apache開(kāi)發(fā)的一個(gè)Java數(shù)據(jù)庫(kù)連接池項(xiàng)目,Tomcat使用的連接池組件就是DBCP。預(yù)先將數(shù)據(jù)庫(kù)連接放在內(nèi)存中,應(yīng)用程序需要建立數(shù)據(jù)庫(kù)連接時(shí)直接到連接池中申請(qǐng)一個(gè)就行,用完再放回。單線程,并發(fā)量低,性能不好,適用于小型系統(tǒng)。

C3P0是開(kāi)源的JDBC連接池,實(shí)現(xiàn)了數(shù)據(jù)源和JNDI綁定,支持JDBC3規(guī)范和JDBC2的標(biāo)準(zhǔn)擴(kuò)展。目前使用它的開(kāi)源項(xiàng)目有Hibernate、Spring等。單線程,性能較差,適用于小型系統(tǒng)。

Druid是Java語(yǔ)言中最好的數(shù)據(jù)庫(kù)連接池,Druid能夠提供強(qiáng)大的監(jiān)控和擴(kuò)展功能,是一個(gè)可用于大數(shù)據(jù)實(shí)時(shí)查詢和分析的高容錯(cuò)、高性能的開(kāi)源分布式系統(tǒng),尤其是當(dāng)發(fā)生代碼部署、機(jī)器故障以及其他產(chǎn)品系統(tǒng)遇到宕機(jī)等情況時(shí),Druid仍能夠保持100%正常運(yùn)行。主要特色:為分析監(jiān)控設(shè)計(jì);快速的交互式查詢;高可用;可擴(kuò)展;Druid是一個(gè)開(kāi)源項(xiàng)目,源碼托管在github上。

Spring配置數(shù)據(jù)源

  • 配置JNDI數(shù)據(jù)源
  • 配置連接池?cái)?shù)據(jù)源
  • 自定義的數(shù)據(jù)源

JNDI數(shù)據(jù)源配置

位于jee命名空間下的<jee:jndi-lookup>元素可以用于檢索JNDI中的任何元素,并將其作為Spring的bean。簡(jiǎn)要的配置示例如下:

<jee:jndi-lookup id="dataSource"jndi-name="/jdbc/SplitterDS"resource-ref="true"/>

或者如下配置

<bean id="dataSource" class="org.springframework.jndi.JndiObjectFactoryBean"> <property name="jndiName"> <value>java:comp/env/jdbc/roseindiaDB_local</value></property> </bean>

jndi-name就是上文中講到的datasource配置文件中的names屬性,如果應(yīng)用程序部署在web應(yīng)用服務(wù)器中,需要將resource-ref為true,這樣jndi-name將會(huì)自動(dòng)添加“java:comp/env/”前綴。

數(shù)據(jù)源連接池配置?

<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"> <property name="driverClassName"> <value>oracle.jdbc.driver.OracleDriver</value> </property> <property name="url"> <value>jdbc:oracle:xxxx</value> </property> <property name="username"> <value>test</value> </property> <property name="password"> <value>test</value> </property> <property name="maxActive"> <value>255</value> </property> <property name="maxIdle"> <value>2</value> </property> <property name="maxWait"> <value>120000</value> </property> </bean>

Spring實(shí)現(xiàn)的基于JDBC驅(qū)動(dòng)的數(shù)據(jù)源

  • DriverManagerDataSource: 每個(gè)連接請(qǐng)求時(shí)返回一個(gè)新建的連接
  • SimpleDriverDataSource: 跟DriverManagerDataSource工作方式類似,但是它直接使用JDBC驅(qū)動(dòng)來(lái)解決特定環(huán)境的類加載問(wèn)題
  • SingleConnectionDataSource: 每個(gè)連接請(qǐng)求的時(shí)候返回同一個(gè)連接,并不是嚴(yán)格意義上的連接池

總結(jié)

以上是生活随笔為你收集整理的Java数据库连接协议JDBC学习的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 国产男女猛烈无遮挡免费视频 | 成人av影院在线观看 | 影音先锋 日韩 | 日本一级视频 | 99热这里只有精品99 | 日本综合在线 | 男人与雌性宠物交啪啪 | 韩国三级与黑人 | 欧美激情精品久久久久久变态 | 人妻无码一区二区三区四区 | 四虎黄色网 | 国产黄站| 日韩精品在线不卡 | 青青草视频在线观看 | 日韩精品视频一区二区 | 日本一区二区在线视频 | 在线观看av中文字幕 | 亚洲国产精品成人午夜在线观看 | 美脚の诱脚舐め脚 | 色峰视频 | 色啪综合 | 草草福利视频 | 精品少妇一区二区三区免费观看 | 日本黄色免费在线观看 | 婷婷亚洲精品 | 综合久久网| 少妇光屁股影院 | 1024亚洲| 日本美女毛茸茸 | 日韩欧美高清片 | 另类综合网 | 琪琪色av | 色网站入口 | 欧美aa级 | 日韩欧美操| 午夜精品久久久久久久 | 夫妻啪啪呻吟x一88av | 成年人黄色录像 | 秋霞欧美一区二区三区视频免费 | 久久精品国产亚洲av香蕉 | 六月丁香在线视频 | 免费一级片 | 毛片av网站| 韩国成人免费视频 | 欧美激情视频一区二区三区不卡 | 国产精品无码成人片 | 久久精品国产亚洲AV高清综合 | 国产精品一区av | 97干干 | 午夜av影院 | 草草福利影院 | 久久激情网 | 中文字字幕码一二三区 | 特级淫片aaaaaaa级附近的 | 中文字幕欧美在线观看 | 亚洲麻豆av | 999色综合| 日韩视频h | 亚洲网色| 久久精品中文字幕 | 女教师痴汉调教hd中字 | 国产精品一区二区免费在线观看 | 国产三级伦理片 | 精品一区二区三区四区五区 | 高清免费视频日本 | va视频在线 | 日本精品视频一区二区 | 在线视频www| 久久接色 | 男人操女人逼逼视频 | 色吊丝av中文字幕 | 激情文学综合网 | 99成人在线观看 | 中文字字幕在线 | 欧美日韩久久精品 | 一级中文字幕 | 黄色三级图片 | 亚洲成人第一页 | 这里只有精品在线观看 | 性感美女视频一二三 | 免费在线观看高清影视网站 | 91伊人| 久久久精品中文字幕 | 九九热精品在线 | 伊人久久一区二区 | 欧洲成人一区二区三区 | 一级特黄aa大片免费播放 | 国产精品毛片一区二区在线看舒淇 | 手机看片99 | 国产精品久久久久久久久免费 | 欧美高清日韩 | 男生和女生差差的视频 | 伊人网站| 四季av中文字幕 | 国产成人精品av在线观 | 日韩经典第一页 | 日韩一区二区三区不卡视频 | 2级黄色片| 国产精品无码久久久久成人app |