




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
第10章數據庫編程《Java基礎案例教程》(第3版)學習目標/Target掌握JDBC的常用API,能夠簡述JDBC常用API的作用
了解JDBC,能夠簡述JDBC的概念及優點掌握DbUtils的使用,能夠使用DbUtils進行數據的增刪改查學習目標/Target熟悉DbUtils的作用,能夠簡述QueryRunner中執行查詢、插入、更新和刪除操作的方法,以及ResultSetHandler中常用實現類封裝結果集的特點熟悉數據庫連接池,能夠在JDBC程序中使用數據庫連接池掌握JDBC編程,能夠獨立編寫JDBC程序操作數據庫中的數據章節概述/
Summary為了滿足業務需求,應用程序通常需要存儲和管理數據。考慮到高效性、便捷性和安全性,大多數應用程序都會選擇將數據存儲在數據庫中進行管理。在與數據庫交互時,應用程序需要使用特定的技術來連接和操作數據庫中的數據。其中,JDBC是Java用于訪問關系型數據庫的一種技術。本章將講解使用JDBC在Java應用程序中進行數據庫編程的相關知識。目錄/Contents0102JDBC簡介JDBC編程03數據庫連接池03DbUtilsJDBC簡介10.110.1.1JDBC概述了解JDBC概述,能夠簡述JDBC的概念及優點
先定一個小目標!10.1.1JDBC概述數據庫編程是指使用編程語言與數據庫進行交互的過程,主要涉及與數據庫建立連接、執行SQL語句、讀取和寫入數據等操作。其中,驅動程序是根據數據庫的規范和要求實現的程序,是連接和操作數據庫的必要組件,不同的數據庫可能有不同的規范和要求,因此提供的驅動程序也會有所差異。10.1.1JDBC概述在JDBC(JavaDatabaseConnectivity,Java數據庫互聯)出現之前,各數據庫廠商提供自己獨立的數據庫驅動程序,開發人員想要操作不同類型的數據庫,需要編寫專門針對每個數據庫的程序。例如,要訪問MySQL數據庫就需要編寫一種程序,要訪問Oracle數據庫就需要編寫另一種程序。這種情況下,應用程序的可移植性非常差,因為每次切換數據庫都需要修改和適配程序。10.1.1JDBC概述JDBC的出現解決了上述問題,JDBC是一套訪問數據庫的標準Java類庫,它定義了應用程序訪問和操作數據庫的API。通過JDBC,開發人員可以使用相同的API操作MySQL、Oracle或其他關系型數據庫。10.1.1JDBC概述Java應用程序通過JDBC訪問不同關系型數據庫的流程如下圖所示。10.1.2JDBC常用API掌握JDBC的常用API,能夠簡述JDBC常用API的作用
先定一個小目標!10.1.2JDBC常用APIJDBC的API主要位于java.sql包中,該包定義了一系列訪問數據庫的接口和類,Java程序開發人員可以利用這些接口和類,編寫操作數據庫數據的JDBC程序。下面將針對java.sql包內常用的接口和類進行講解。(1)Driver接口Driver接口是JDBC驅動程序的核心接口之一,它定義了與數據庫驅動程序進行通信的方法。每個數據庫廠商都會提供自己的驅動程序并實現Driver接口,以支持應用程序與該數據庫的連接。在編寫JDBC程序時,需要把所使用的數據庫驅動程序或類庫加載到項目的classpath中。10.1.2JDBC常用API(2)DriverManager類DriverManager類是用于管理JDBC驅動程序的類,該類中定義了注冊驅動程序及獲取數據庫連接對象的靜態方法,其常用方法如下表所示。方法聲明功能描述staticvoidregisterDriver(Driver
driver)用于在DriverManager中注冊給定的JDBC驅動程序staticConnectiongetConnection(Stringurl,Stringuser,Stringpassword)用于建立和數據庫的連接,并返回表示連接的Connection對象需要注意的是,在編寫代碼時,一般不會使用registerDriver(Driver
driver)方法注冊驅動。因為DriverManager類中有一個靜態代碼塊,該靜態代碼塊內部會執行DriverManager對象的
registerDriver()方法注冊驅動,所以,如果使用registerDriver()方法注冊驅動,相當于注冊了兩次驅動程序。10.1.2JDBC常用API(2)DriverManager類如果想要手動注冊驅動,只需加載Driver類就可以實現,手動注冊驅動程序的示例如下。com.mysql.cj.jdbc.Driver為需要注冊到DriverManager的驅動類。需要注意的是,使用Class類的forName()方法注冊驅動時,參數中指定的驅動類必須是類的全限定名。Class.forName("com.mysql.cj.jdbc.Driver");10.1.2JDBC常用API(2)DriverManager類JDBC根據URL的信息與數據庫建立連接,其URL需要按照特定的語法格式來配置。具體的URL格式會根據不同的數據庫類型和驅動程序而有所變化,其中連接到MySQL數據庫的URL語法格式如下。jdbc:mysql://[hostname]:[port]/database-name[?參數鍵值對1&參數鍵值對2…]10.1.2JDBC常用API(2)DriverManager類對連接到MySQL數據庫的URL語法格式中的各項解釋如下。“jdbc:mysql://”:表示JDBC驅動程序使用
MySQL協議進行連接。hostname:數據庫的主機名或IP地址。port:數據庫的端口號,如果連接的是本機MySQL數據庫,并且使用MySQL的默認端口號3306,則URL中的[hostname]:[port]可以省略。database-name:數據庫名稱,如果需要在URL中定制連接的一些屬性和配置,可以在數據庫名稱后面使用問號(?)進行聲明,如果需要添加多個參數鍵值對,參數鍵值對之間使用&進行連接。10.1.2JDBC常用API(2)DriverManager類編寫JDBC程序中,注冊驅動和獲取數據庫連接的示例代碼如下。//注冊驅動Class.forName("com.mysql.cj.jdbc.Driver");//數據庫的連接路徑Stringurl="jdbc:mysql://localhost:3306/jdbc";Stringusername="root";Stringpassword="root";//獲取數據庫連接Connectionconn=DriverManager.getConnection(url,username,password);10.1.2JDBC常用API
小提示:如果基于MySQL5之后的驅動包編寫操作數據庫數據的JDBC程序時,可以省略注冊驅動的步驟。程序執行時會自動加載驅動包的META-INF/services/java.sql.Driver文件中的驅動類。MySQL5的驅動類名稱為com.mysql.jdbc.Driver,MySQL8的驅動類為com.mysql.cj.jdbc.Driver。(2)DriverManager類10.1.2JDBC常用API(3)Connection接口Connection接口用于表示與數據庫的連接,是進行數據庫操作的主要入口點。可以通過Connection對象與數據庫建立連接,并進行各種數據庫操作,包括執行SQL查詢、更新數據和進行事務管理等。10.1.2JDBC常用API(3)Connection接口Connection接口的常用方法如下表所示。方法聲明功能描述StatementcreateStatement()用于創建一個Statement對象,Statement對象可以執行靜態SQL語句PreparedStatementprepareStatement(Stringsql)用于創建一個PreparedStatement對象,PreparedStatement對象可以執行預編譯的SQL語句voidcommit()用于提交事務,使所有上一次提交/回滾后進行的更改成為持久更改,并釋放當前Connection對象持有的所有數據庫鎖voidsetAutoCommit(booleanautoCommit)用于設置是否關閉自動提交模式voidroolback()用于回滾事務,用于取消在當前事務中進行的所有更改,并釋放當前Connection對象持有的所有數據庫鎖voidclose()用于關閉與數據庫的連接并釋放資源10.1.2JDBC常用API(3)Connection接口Connectionconn=DriverManager.getConnection(url,username,password);Stringsql="SELECT*FROMuserWHEREid=1";//定義SQL語句Statementstmt=conn.createStatement();//獲取執行SQL語句的對象
Statementtry{
conn.setAutoCommit(false);//關閉事務的自動提交,手動提交事務
stmt.executeUpdate(sql);//執行SQL語句
mit();//提交事務}catch(Exceptionthrowables){
conn.rollback();
//回滾事務 throwables.printStackTrace();}stmt.close();//釋放資源conn.close();編寫JDBC程序時,通過Connection進行事物管理的示例如右所示。10.1.2JDBC常用API(4)Statement接口Statement接口是Java中用于執行SQL語句的重要接口之一,該接口的實例可以通過Connection對象的createStatement()方法獲取,通過該接口實例可以將靜態SQL語句發送到數據庫中進行編譯與執行,并返回數據庫的處理結果。靜態SQL語句是指在編譯時就確定好的SQL語句,其結構和內容在程序運行期間不會發生變化。10.1.2JDBC常用API(4)Statement接口Statement接口提供了三個常用方法用于執行SQL語句,具體如下表所示。方法聲明功能描述booleanexecute(Stringsql)用于執行SQL語句,該方法執行SQL語句后可能會返回多個結果,如果執行后結果為ResultSet對象,則返回true;如果執行后結果為受影響的行數或沒有任何結果,則返回falseintexecuteUpdate(Stringsql)用于執行SQL中的INSERT、UPDATE和DELETE語句。該方法返回一個int類型的值,表示數據庫中受SQL語句影響的行數ResultSetexecuteQuery(Stringsql)用于執行SQL中的SELECT語句,該方法返回一個表示查詢結果的ResultSet對象10.1.2JDBC常用API(5)PrepareStatement接口使用Statement接口執行SQL語句時,如果不對輸入的SQL語句進行把控,就很有可能收到SQL注入攻擊。同時,手動拼接SQL語句會使代碼變得冗長,難以閱讀和維護。為此,JDBCAPI提供了擴展的PreparedStatement接口,該接口的對象可以執行預編譯的SQL語句。預編譯的SQL語句是指在執行SQL語句之前,先將SQL語句發送到數據庫進行編譯,生成一個預編譯的執行計劃,然后再執行。預編譯的SQL語句在每次執行時只需傳遞參數,而無需重新解析和編譯SQL語句,可以在SQL語句中使用占位符來代替具體的參數值。10.1.2JDBC常用API(5)PrepareStatement接口PreparedStatement接口還提供了一系列setter方法,用于將具體的參數值賦值給指定的占位符,常用方法如下。方法聲明功能描述intexecuteUpdate()用于執行INSERT、UPDATE或DELETE語句ResultSetexecuteQuery()用于執行SELECT語句,并返回結果集voidsetInt(int
parameterIndex,int
x)用于將SQL語句中parameterIndex位置的占位符賦值為int類型的參數xvoidsetFloat(intparameterIndex,floatf)用于將SQL語句中parameterIndex位置的占位符賦值為float類型的參數fvoidsetLong(intparameterIndex,longl)用于將SQL語句中parameterIndex位置的占位符賦值為long類型的參數l10.1.2JDBC常用API(5)PrepareStatement接口接上頁表格。方法聲明功能描述voidsetDouble(intparameterIndex,doubled)用于將SQL語句中parameterIndex位置的占位符賦值為double類型的參數dvoidsetBoolean(intparameterIndex,booleanb)用于將SQL語句中parameterIndex位置的占位符賦值為boolean類型的參數bvoidsetString(intparameterIndex,Stringx)用于將SQL語句中parameterIndex位置的占位符賦值為String類型的參數xvoidsetObject(intparameterIndex,Objecto)用于將SQL語句中parameterIndex位置的占位符賦值為Object
類型的參數o10.1.2JDBC常用API(6)ResultSet接口ResultSet接口是JDBC中用于表示數據庫查詢結果集的接口,執行查詢語句得到的結果集會被封裝到一個ResultSet對象中。可以將ResultSet對象看作一個包含多個數據行的表格,每一行代表結果集中的一條記錄,每一列代表每個字段的值。ResultSet接口內部維護著一個游標,用于指示當前行的位置。初始化ResultSet對象時,游標位于第一行之前的位置。通過調用next()方法,可以將游標移動到下一行。10.1.2JDBC常用API(6)ResultSet接口ResultSet接口的常用方法如下表所示。方法聲明功能描述StringgetString(intcolumnIndex)通過字段的索引獲取String類型的值,參數columnIndex代表字段在查詢結果中的索引StringgetString(StringcolumnName)通過字段的名稱獲取String類型的值,參數columnName代表字段的名稱intgetInt(intcolumnIndex)通過字段的索引獲取int類型的值,參數columnIndex代表字段在查詢結果中的索引intgetInt(StringcolumnName)通過字段的名稱獲取int類型的值。參數columnName代表字段的名稱booleanabsolute(introw)將游標移動到結果集的第row條記錄booleanprevious()將游標從結果集的當前位置移動到上一條記錄10.1.2JDBC常用API(6)ResultSet接口方法聲明功能描述booleannext()將游標從結果集的當前位置移動到下一條記錄voidbeforeFirst()將游標移動到結果集開頭(第一條記錄之前)voidafterLast()將游標指針移動到結果集末尾(最后一條記錄之后)booleanfirst()將游標移動到結果集的第一條記錄booleanlast()將游標移動到結果集的最后一條記錄intgetRow()返回當前記錄的行號StatementgetStatement()返回生成結果集的Statement對象voidclose()釋放此ResultSet對象的數據庫和JDBC資源10.1.2JDBC常用API(6)ResultSet接口ResultSet移動結果集的游標和獲取結果集數據的示例如下所示。//執行SQL并獲取結果集ResultSetrs=stmt.executeQuery(sql);//光標向下移動一行,并且判斷當前行是否有數據while(rs.next()){ //根據字段的名稱獲取結果集中的數據 intid=rs.getInt("id"); Stringname=rs.getString("username");//根據字段的索引獲取結果集中的數據 Stringpwd=rs.getString(3);}//釋放資源rs.close();JDBC編程10.210.2JDBC編程掌握JDBC編程,能夠獨立編寫JDBC程序操作數據庫中的數據
先定一個小目標!10.2JDBC編程加載并注冊數據庫驅動程序通過DriverManager獲取數據庫連接通過Connection對象獲取Statement對象關閉連接,釋放資源操作ResultSet結果集執行SQL語句使用JDBC的常用API編寫JDBC程序的大致步驟如下。10.2JDBC編程案例演示下面根據上述步驟編寫一個JDBC程序,用于查詢數據庫中的數據并輸出在控制臺。(1)搭建數據庫環境在MySQL中創建一個名稱為jdbc_demo的數據庫,在該數據庫中創建一個tb_space表用于存儲航天里程碑的信息。CREATEDATABASEIFNOTEXISTSjdbc_demoCHARACTERSETutf8mb4;USEjdbc_demo;CREATETABLEtb_space( idINTPRIMARYKEYAUTO_INCREMENT, nameVARCHAR(40), launchtimeDATE );10.2JDBC編程案例演示(1)搭建數據庫環境為了便于后續測試,在tb_space表中插入三條數據。INSERTINTOtb_space(name,launchtime) VALUES('東方紅一號','1970-4-24'),
('神舟五號','2003-10-15'),('嫦娥一號','2007-10-24');10.2JDBC編程案例演示(1)搭建數據庫環境為了查看數據是否插入成功,使用SELECT語句查詢tb_space表中的數據,執行結果如下圖所示。10.2JDBC編程案例演示(2)創建項目,導入數據庫驅動程序在IDEA中創建一個名稱為chapter10的Java項目,在項目的根目錄創建文件夾lib,在lib文件夾中導入數據庫驅動的JAR包。右擊lib文件夾,在彈出的菜單中選擇“AddasLibrary...”,彈出CreateLibrary對話框。10.2JDBC編程案例演示(3)編寫JDBC程序在項目chapter10的src目錄下創建一個名稱為com.itheima.jdbc的包,并在該包中創建類Example01。在該類中讀取jdbc_demo數據庫下tb_space表中的所有數據,并將讀取結果輸出到控制臺。Example01.java源代碼10.2JDBC編程案例演示(3)編寫JDBC程序運行文件Example01.java,結果如下圖所示。數據庫連接池10.310.3數據庫連接池熟悉數據庫連接池,能夠在JDBC程序中使用數據庫連接池
先定一個小目標!10.3數據庫連接池在之前的講解中,每次連接數據庫都會創建一個Connection對象,使用完畢就會將其銷毀。每一個數據庫連接對象都對應一個物理的數據庫連接,這樣重復創建與銷毀的過程會造成系統的性能低下,對此,可以使用數據庫連接池。10.3數據庫連接池數據庫連接池是個容器,負責分配、管理數據庫連接對象,通過數據庫連接池,程序可以復用連接對象,而不是每次連接數據庫都重新創建和銷毀數據庫連接對象,可以大大提高系統的性能和效率。10.3數據庫連接池數據庫連接池操作數據庫的過程如下圖所示。10.3數據庫連接池為了更加方便地使用和管理數據庫連接池,Java提供了DataSource接口,該接口為應用程序提供了標準化和可重用的方式管理和提供數據庫連接。目前,許多廠商和組織已經實現了DataSource接口并提供相應的數據庫連接池,常見的數據庫連接池包括DBCP、C3P0和Druid等。不同數據庫連接池的底層實現可能存在差異,但使用方法基本相似。下面以Druid為例講解數據庫連接池的使用。10.3數據庫連接池Druid數據庫連接池的使用步驟如下所示。(1)導入JAR包在項目chapter10的lib文件夾中添加Druid的JAR包,并使lib文件夾內的JAR包在項目中生效。10.3數據庫連接池(2)創建配置文件在項目的src目錄下創建配置文件perties,用于存放數據庫連接的信息。perties源代碼10.3數據庫連接池(3)測試數據庫連接池創建一個測試類Example02,并在該類的main()方法中加載連接池的配置文件,根據配置文件的信息創建連接池對象,并通過連接池對象獲取數據庫連接對象。Example02.java源代碼10.3數據庫連接池(3)測試數據庫連接池運行文件Example02.java文件,運行結果如下圖所示。DbUtils10.410.4DbUtils掌握DbUtils的使用,能夠使用DbUtils進行數據的增刪改查
先定一個小目標!10.4DbUtils使用JDBC進行開發時,像SQL中傳遞參數值,以及處理結果的時候比較繁瑣,導致冗余代碼較多,對此,可以將JDBC常用的一些功能進行封裝,提高編程效率。CommonsDbUtils是一個開源的JDBC工具類庫。它對JDBC進行了簡單的封裝,簡化了JDBC進行數據查詢和記錄讀取操作。10.4DbUtils1.QueryRunner類QueryRunner類提供了對SQL語句操作的API,它封裝的查詢、插入、更新和刪除等數據庫操作方法,可以更方便地進行數據庫操作。QueryRunner類常用的構造方法和方法如下表所示。方法功能描述
QueryRunner()用于創建一個與數據庫無關的QueryRunner對象,后期再操作數據庫時,需要手動提供一個Connection對象QueryRunner(DataSourceds)用于根據數據源ds創建QueryRunner對象intupdate(Connectionconn,Stringsql,Object...params)用于執行增加、刪除和更新等數據操作,其中傳入的參數
params
會賦值到SQL語句的占位符中,并根據數據庫連接對象執行SQL語句10.4DbUtils1.QueryRunner類接上頁表格。方法功能描述intupdate(Stringsql,Object...params)用于執行增加、刪除和更新等數據操作,和上一行方法的區別在于它需要從構造方法的數據源DataSource中獲得Connection對象query(Connectioncon
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年南昌貨運從業資格證考試題及答案大全
- 八個著力戰略部署與3341項目工程-酒泉
- 物流行業貨物運輸及安全送達證明(7篇)
- ××超市促銷活動規定
- 聯合營銷合作協議及說明
- 2025年消防安全知識實操考試題庫:實操應用篇重點難點
- 2025年勞動關系協調員(初級)考試試卷:勞動保障政策解讀與應用策略技巧
- 2025年鑄造機械項目規劃申請報告
- 體育場館設施維護管理服務協議
- 歷史文化遺產保護研究試題庫
- 2025年全國保密教育線上培訓考試試題庫帶答案(典型題)含答案詳解
- 甘肅蘭州2025年公開招聘農村(村務)工作者筆試題帶答案分析
- 青少年去極端化安全教育宣傳
- 大健康項目商業計劃書
- AI賦能與素養導向:初中英語智慧課堂的融合實踐研究
- 《2025年危險化學品企業安全生產執法檢查重點事項指導目錄》解讀與培訓
- 2025全國交通運輸行業職業技能競賽學生組技術方案
- 常用儀表使用方法鐵道信號綜合實訓課件
- 2025云南黃金礦業集團股份限公司招聘114人易考易錯模擬試題(共500題)試卷后附參考答案
- 2025年03月四川成都農業科技中心公開招聘筆試歷年典型考題(歷年真題考點)解題思路附帶答案詳解
- 預防職務犯罪交流課件
評論
0/150
提交評論