數據庫連接池與DBUtils工具 課件_第1頁
數據庫連接池與DBUtils工具 課件_第2頁
數據庫連接池與DBUtils工具 課件_第3頁
數據庫連接池與DBUtils工具 課件_第4頁
數據庫連接池與DBUtils工具 課件_第5頁
已閱讀5頁,還剩85頁未讀 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

第11章數據庫連接池與DBUtils工具《Java

Web程序設計任務教程(第2版)》學習目標/Target了解什么是數據庫連接池了解DataSource接口的作用

掌握DBCP和C3P0數據庫連接池的使用了解DBUtils工具中常見的API

掌握使用DBUtils工具對數據庫進行增刪改查的操作章節(jié)概述/Summary

上一章講解了JDBC的基本用法和操作,由于每操作一次數據庫,都會執(zhí)行一次創(chuàng)建和斷開Connection對象的操作,頻繁的操作Connection對象十分影響數據庫的訪問效率,并且增加了代碼量,所以在實際開發(fā)中,開發(fā)人員通常會使用數據庫連接池來解決這些問題。Apache組織提供了一個DBUtils工具類庫,該類庫實現了對JDBC的簡單封裝,能在不影響數據庫訪問性能的情況下,極大地簡化JDBC的編碼工作。本章將針對數據庫連接池和DBUtils工具進行詳細講解。目錄/Contents0102數據庫連接池DBUtils工具數據庫連接池11.111.1.1什么是數據庫連接池先定一個小目標!

先定一個小目標!了解數據庫連接池的概念,能夠知道數據庫連接池用于做什么STEP01在JDBC編程中,每次創(chuàng)建和斷開Connection對象都會消耗一定的時間和IO資源。在Java程序與數據庫之間建立連接時,數據庫端要驗證用戶名和密碼,并且要為這個連接分配資源,Java程序則要把代表連接的java.sql.Connection對象等加載到內存中,所以建立數據庫連接的開銷很大,尤其是在大量的并發(fā)訪問時。假如某網站一天的訪問量是10萬,那么該網站的服務器就需要創(chuàng)建、斷開連接10萬次,頻繁地創(chuàng)建、斷開數據庫連接會影響數據庫的訪問效率,甚至導致數據庫崩潰。STEP03JDBC連接數據庫的缺陷11.1.1什么是數據庫連接池STEP01為了避免頻繁的創(chuàng)建數據庫連接,數據庫連接池技術應運而生。數據庫連接池負責分配、管理和釋放數據庫連接,它允許應用程序重復使用現有的數據庫連接,而不是重新建立。簡單地說,數據庫連接池就是為數據庫建立的一個“緩沖池”。預先在“緩沖池”中放入一定數量的連接,當需要建立數據庫連接時,只需要從“緩沖池”中取出一個,使用完畢后再放回“緩沖池”即可。STEP03數據庫連接池技術11.1.1什么是數據庫連接池STEP01STEP03連接池連接數據庫的原理圖11.1.1什么是數據庫連接池STEP01數據庫連接池在初始化時將創(chuàng)建一定數量的數據庫連接放到連接池中,當應用程序訪問數據庫時并不是直接創(chuàng)建Connection,而是向連接池“申請”一個Connection。如果連接池中有空閑的Connection,則返回一個鏈接給應用程序,否則應用程序需要創(chuàng)建新的Connection。使用完畢后,連接池會將Connection回收,重新放入連接池以供其他的線程使用,從而減少創(chuàng)建和斷開數據庫連接的次數,提高數據庫的訪問效率。STEP03連接池連接數據庫的原理圖的解釋11.1.1什么是數據庫連接池11.1.2DataSource接口先定一個小目標!

先定一個小目標!了解使用javax.sql.DataSource接口獲取數據庫連接對象STEP01為了獲取數據庫連接對象(Connection),JDBC提供了javax.sql.DataSource接口,javax.sql.DataSource接口負責與數據庫建立連接,并定義了返回值為Connection對象的方法,具體如下。ConnectiongetConnection()。ConnectiongetConnection(String

username,String

password)。STEP03DataSource接口的方法11.1.2DataSource接口注意:上述兩個重載的方法,都能用來獲取Connection對象。不同的是,第一個方法是通過無參的方式建立與數據庫的連接,第二個方法是通過傳入登錄信息的方式建立與數據庫的連接。STEP01接口通常都會有實現類,javax.sql.DataSource接口也不例外,通常習慣性的把實現了javax.sql.DataSource接口的類稱為數據源,顧名思義,數據源即數據的來源。每創(chuàng)建一個數據庫連接,這個數據庫連接信息都會存儲到數據源中。

STEP03DataSource接口的實現類11.1.2DataSource接口STEP01數據源用于管理數據庫連接池。如果數據是水,數據庫就是水庫,數據庫連接池就是連接到水庫的管道,終端用戶看到的數據集是管道里流出來的水。一些開源組織提供了數據庫連接池的獨立實現,常用的有DBCP數據庫連接池和C3P0數據庫連接池。STEP03數據源的解釋11.1.2DataSource接口11.1.3DBCP數據庫連接池先定一個小目標!

先定一個小目標!掌握如何使用DBCP數據庫連接池STEP01DBCP即數據庫連接池(DataBaseConnectionPool),是Apache組織下的開源連接池實現,也是Tomcat服務器使用的連接池組件。使用DBCP數據庫連接池時,需要在應用程序中導入commons-dbcp2.jar和commons-pool2.jar兩個JAR包。STEP03DBCP數據庫連接池11.1.3DBCP數據庫連接池STEP01commons-dbcp2.jar包是DBCP數據庫連接池的實現包,包含所有操作數據庫連接信息和數據庫連接池初始化信息的方法,并實現了DataSource接口的getConnection()方法。STEP03commons-dbcp2.jar11.1.3DBCP數據庫連接池STEP01commons-pool2.jar包是commons-dbcp2.jar包的依賴包,為commons-dbcp2.jar包中的方法提供了支持。缺少該依賴包,commons-dbcp2.jar包中的很多方法就沒有辦法實現。STEP03commons-pool2.jar包11.1.3DBCP數據庫連接池STEP01commons-dbcp2.jar包含兩個核心類,分別是BasicDataSourceFactory和BasicDataSource,它們都包含獲取DBCP數據庫連接池對象的方法。STEP03commons-pool2.jar包包含的核心類11.1.3DBCP數據庫連接池STEP01STEP03BasicDataSource類的常用方法11.1.3DBCP數據庫連接池方法名稱功能描述void

setDriverClassName(String

driverClassName)設置連接數據庫的驅動名稱void

setUrl(String

url)設置連接數據庫的路徑void

setUsername(String

username)設置數據庫的登錄賬號void

setPassword(String

password)設置數據庫的登錄密碼voidsetInitialSize(int

initialSize)設置數據庫連接池初始化的連接數目voidsetMinIdle(int

minIdle)設置數據庫連接池最小閑置連接數目ConnectiongetConnection()從連接池中獲取一個數據庫連接STEP01BasicDataSource對象的常用方法中setDriverClassName()、setUrl()、setUsername()、setPassword()等方法都是設置數據庫連接信息的方法;setInitialSize()、setMinIdle()等方法都是設置數據庫連接池初始化值的方法;getConnection()方法可以從DBCP數據庫連接池中獲取一個數據庫連接。STEP03BasicDataSource對象的常用方法11.1.3DBCP數據庫連接池STEP01BasicDataSourceFactory是創(chuàng)建BasicDataSource對象的工廠類,它包含一個返回值為BasicDataSource類型的方法createDataSource(),該方法通過讀取配置文件的信息生成數據源對象并返回給調用者。把數據庫的連接信息和數據源的初始化信息提取出來寫進配置文件,這樣讓代碼看起來更加簡潔,思路也更加清晰。STEP03BasicDataSourceFactory工廠類11.1.3DBCP數據庫連接池STEP01在使用BasicDataSource類創(chuàng)建數據源對象時,需要手動給數據源對象設置屬性值,然后獲取數據庫連接對象。下面通過一個案例演示BasicDataSource類的使用。STEP03創(chuàng)建數據源對象—通過BasicDataSource類直接創(chuàng)建數據源對象11.1.3DBCP數據庫連接池STEP01創(chuàng)建項目并編寫代碼在IDEA中創(chuàng)建一個名稱為chapter11的Web項目,在項目chapter11中導入mysql-connector-java-8.0.15.jar、commons-dbcp2-2.7.0.jar、commons-logging-1.2.jar以及commons-pool2-2.8.0.jar四個JAR包,并發(fā)布到類路徑下;然后在項目的src目錄下創(chuàng)建包cn.itcast.chapter11.example,并在該包下創(chuàng)建一個Example01類,該類采用手動方式獲取數據庫的連接信息和數據源的初始化信息。11.1.3DBCP數據庫連接池STEP02運行chapter11的Web項目程序的運行結果如下圖所示。11.1.3DBCP數據庫連接池STEP01除了使用BasicDataSource直接創(chuàng)建數據源對象外,還可以使用BasicDataSourceFactory工廠類讀取配置文件,創(chuàng)建數據源對象,然后獲取數據庫連接對象。下面通過一個案例演示通過讀取配置文件創(chuàng)建數據源對象。STEP03創(chuàng)建數據源對象—通過讀取配置文件創(chuàng)建數據源對象11.1.3DBCP數據庫連接池STEP01在chapter11項目的src目錄下創(chuàng)建perties文件,該文件用于設置數據庫的連接信息和數據源的初始化信息。perties文件的實現如下所示。11.1.3DBCP數據庫連接池#連接設置driverClassName=com.mysql.cj.jdbc.Driverurl=jdbc:mysql://localhost:3306/jdbc?serverTimezone=GMT%2B8username=rootpassword=root#初始化連接initialSize=5#最大空閑連接maxIdle=10STEP02創(chuàng)建Example02類11.1.3DBCP數據庫連接池在cn.itcast.chapter11.example包下創(chuàng)建一個Example02類,Example02類從配置文件中獲取數據庫的連接信息和數據源的初始化信息。STEP03運行Example02類程序的運行結果如下圖所示。11.1.3DBCP數據庫連接池由上圖可知,BasicDataSourceFactory工廠類成功讀取了配置文件并創(chuàng)建了數據源對象,然后獲取到了數據庫連接對象。11.1.4C3P0數據庫連接池先定一個小目標!

先定一個小目標!掌握如何使用C3P0數據庫連接池STEP01C3P0是目前最流行的開源數據庫連接池之一,它實現了DataSource數據源接口,支持JDBC2和JDBC3的標準規(guī)范,易于擴展并且性能優(yōu)越,著名的開源框架Hibernate和Spring都支持該數據庫連接池。在使用C3P0數據庫連接池開發(fā)時,需要了解C3P0中DataSource接口的實現類ComboPooledDataSource,它是C3P0的核心類,提供了數據源對象的相關方法。STEP03C3P0數據庫連接池11.1.4C3P0數據庫連接池STEP01STEP03ComboPooledDataSource類的常用方法11.1.4C3P0數據庫連接池方法名稱功能描述voidsetDriverClass()設置連接數據庫的驅動名稱voidsetJdbcUrl()設置連接數據庫的路徑voidsetUser()設置數據庫的登錄賬號voidsetPassword()設置數據庫的登錄密碼voidsetMaxPoolSize()設置數據庫連接池最大連接數目voidsetMinPoolSize()設置數據庫連接池最小連接數目voidsetInitialPoolSize()設置數據庫連接池初始化的連接數目ConnectiongetConnection()從數據庫連接池中獲取一個連接STEP01當使用C3P0數據庫連接池時,首先需要創(chuàng)建數據源對象,創(chuàng)建數據源對象可以通過調用ComboPooledDataSource類的構造方法實現。ComboPooledDataSource類有兩個構造方法,分別是ComboPooledDataSource()和ComboPooledDataSource(StringconfigName)。STEP03使用C3P0數據庫連接池11.1.4C3P0數據庫連接池STEP01調用ComboPooledDataSource()構造方法創(chuàng)建數據源對象,需要手動給數據源對象設置屬性值,然后獲取數據庫連接對象。STEP03通過ComboPooledDataSource()構造方法創(chuàng)建數據源對象11.1.4C3P0數據庫連接池STEP0111.1.4C3P0數據庫連接池在chapter11中導入jar包并編寫代碼在項目chapter11中導入JAR包c3p0-.jar和mchange-commons-java-.jar,然后在cn.itcast.chapter11.example包下創(chuàng)建一個Example03類,Example03類采用C3P0數據庫連接池,并使用C3P0數據庫連接池對象獲取Connection對象。STEP0211.1.4C3P0數據庫連接池運行chapter11項目在chapter11中運行main()方法,程序的運行結果如下圖所示。STEP01調用ComboPooledDataSource(StringconfigName)構造方法可以讀取c3p0-config.xml配置文件,根據配置文件中的配置信息創(chuàng)建數據源對象,然后獲取數據庫連接對象。STEP03通過ComboPooledDataSource(StringconfigName)構造方法創(chuàng)建數據源對象11.1.4C3P0數據庫連接池STEP01在chapter11項目下創(chuàng)建配置文件在chapter11項目的src根目錄下創(chuàng)建一個c3p0-config.xml文件,用于設置數據庫的連接信息和數據源的初始化信息。11.1.4C3P0數據庫連接池STEP02在chapter11項目下創(chuàng)建Example04類并編寫代碼在cn.itcast.chapter11.example包下創(chuàng)建一個Example04類,在該類中使用C3P0數據庫連接池從配置文件中獲取Connection對象。11.1.4C3P0數據庫連接池STEP03運行Example04類11.1.4C3P0數據庫連接池在chapter11中運行main()方法,程序的運行結果如下圖所示。STEP01需要注意的是,在使用ComboPooledDataSource(StringconfigName)方法創(chuàng)建數據源對象時必須遵循以下兩點:(1)配置文件名稱必須為c3p0-config.xml或者perties,并且位于該項目的src根目錄下。(2)當傳入的configName值為空或者不存在時,使用默認配置信息創(chuàng)建數據源。STEP03通過ComboPooledDataSource(StringconfigName)構造方法創(chuàng)建數據源對象11.1.4C3P0數據庫連接池DBUtils工具11.211.2.1DBUtils工具介紹先定一個小目標!

先定一個小目標!了解什么是DBUtils工具,能夠知道DBUtils工具用于做什么STEP01為了更加簡單地使用JDBC,Apache組織提供了一個DBUtils工具,它是操作數據庫的一個組件,實現了對JDBC的簡單封裝,可以在不影響數據庫訪問性能的情況下簡化JDBC的編碼工作量。DBUtils工具要有三個作用。寫數據,DBUtils可以通過編寫SQL語句對數據表進行增、刪、改操作。讀數據,DBUtils工具可以將從數據表中讀取的數據結果集轉換成Java常用類集合,以方便對結果進行處理。優(yōu)化性能,在使用DBUtils工具的基礎上,程序可以使用數據源、JNDI、數據庫連接池等技術減少代碼冗余。STEP03DBUtils工具的作用11.2.1DBUtils工具介紹STEP01STEP03DBUtils的核心類庫的三個核心API11.2.1DBUtils工具介紹由上圖可知,DBUtils核心類庫主要包括DBUtils類、QueryRunner類和ResultSetHandler接口。DBUtils工具主要通過這三個核心API進行JDBC的所有操作。11.2.2DBUtils類先定一個小目標!

先定一個小目標!了解DBUtils類的常用方法STEP01DBUtils類主要提供了加載JDBC驅動、關閉資源等方法,DBUtils類中的方法一般為靜態(tài)方法,可以直接使用類名進行調用。STEP03DBUtils類的作用11.2.2DBUtils類STEP01STEP03DBUtils類的常用方法11.2.2DBUtils類方法名稱功能描述voidclose(Connectionconn)當連接不為NULL時,關閉連接voidclose(Statementstat)當聲明不為NULL時,關閉聲明voidclose(ResultSetrs)當結果集不為NULL時,關閉結果集voidcloseQuietly(Connectionconn)當連接不為NULL時,關閉連接,并隱藏一些在程序中拋出的SQL異常voidcloseQuietly(Statementstat)當聲明不為NULL時,關閉聲明,并隱藏一些在程序中拋出的SQL異常voidcloseQuietly(ResultSetrs)當結果集不為NULL時,關閉結果集,并隱藏一些在程序中拋出的SQL異常voidcommitAndCloseQuietly(Connectionconn)提交連接后關閉連接,并隱藏一些在程序中拋出的SQL異常BooleanloadDriver(StringdriveClassName)裝載并注冊JDBC驅動程序,如果成功就返回true11.2.3QueryRunner類先定一個小目標!

先定一個小目標!掌握QueryRunner類的用法以及QueryRunner類的常用方法STEP01QueryRunner類簡化了執(zhí)行SQL語句的代碼,它與ResultSetHandler配合就能完成大部分的數據庫操作,大大減少了編碼量。QueryRunner類提供了帶有一個參數的構造方法,該方法以javax.sql.DataSource的實例對象作為參數傳遞到QueryRunner的構造方法中來獲取Connection對象。針對不同的數據庫操作,QueryRunner類提供不同的方法。STEP03QueryRunner類的作用11.2.3QueryRunner類STEP01STEP03QueryRunner類的常用方法方法名稱功能描述Objectquery(Connectionconn,Stringsql,ResultSetHandlerrsh,Object[]params)執(zhí)行查詢操作,傳入的Connection對象不能為空Objectquery(Stringsql,ResultSetHandlerrsh,Object[]params)執(zhí)行查詢操作Objectquery(Connectionconn,Stringsql,ResultSetHandlerrsh)執(zhí)行一個不需要置換參數的查詢操作intupdate(Connectionconn,Stringsql,ResultSetHandlerrsh)執(zhí)行一個更新(插入、刪除、更新)操作intupdate(Connectionconn,Stringsql)執(zhí)行一個不需要置換參數的更新操作intbatch(Connectionconn,Stringsql,Object[][]params)批量添加、修改、刪除intbatch(Stringsql,Object[][]params)批量添加、修改、刪除11.2.3QueryRunner類11.2.4ResultSetHandler接口先定一個小目標!

先定一個小目標!熟悉如何使用ResultSetHandler接口處理ResultSet結果集STEP01ResultSetHandler接口用于處理ResultSet結果集,它可以將結果集中的數據轉換為不同的形式。根據結果集中不同的數據類型,ResultSetHandler提供了幾種常見的實現類。BeanHandler:將結果集中的第一行數據封裝到一個對應的JavaBean實例中。BeanListHandler:將結果集中的每一行數據都封裝到一個對應的JavaBean實例中,并存放到List里。ColumnListHandler:將某列屬性的值封裝到List集合中。ScalarHandler:將結果集中某一條記錄的某一列數據存儲成Object對象。STEP03ResultSetHandler接口中的常見實現類11.2.4ResultSetHandler接口STEP01ResultSetHandler接口還提供了一個單獨的方法handle(java.sql.ResultSetrs),如果上述實現類沒有提供想要的功能,可以自定義一個實現ResultSetHandler接口的類,然后通過重寫handle()方法,實現結果集的處理。STEP03ResultSetHandler接口中的方法handle(java.sql.ResultSetrs)11.2.4ResultSetHandler接口11.2.5ResultSetHandler實現類先定一個小目標!

先定一個小目標!掌握ResultSetHandler接口實現類中BeanHandler、BeanListHandler、ColumnListHandler和ScalarHandler的使用STEP01BeanHandler和BeanListHandler實現類是將結果集中的數據封裝到對應的JavaBean中。在封裝時,表中數據的字段和JavaBean的屬性是相互對應的,一條數據記錄被封裝進一個對應的JavaBean對象中。BeanHandler和BeanListHandler的對比如下表所示。STEP03BeanHandler和BeanListHandler11.2.5ResultSetHandler實現類類名稱相同點不同點BeanHandler都要先將結果集封裝進JavaBean封裝單條數據,把結果集的第一條數據的字段放入一個JavaBean中BeanListHandler封裝多條數據,把每條數據的字段值各放入一個JavaBean中,再把所有JavaBean都放入List集合中STEP0111.2.5ResultSetHandler實現類下面通過代碼演示BeanHandler和BeanListHandler的使用以及兩者的區(qū)別。在名為jdbc的數據庫中創(chuàng)建數據表user,創(chuàng)建語句如下:USEjdbc;CREATETABLEuser(idINT(3)PRIMARYKEYAUTO_INCREMENT,nameVARCHAR(20)NOTNULL,passwordVARCHAR(20)NOTNULL);STEP0211.2.5ResultSetHandler實現類向user表插入三條數據并查詢user表INSERTINTOuser(name,password)VALUES('zhangsan','123456');INSERTINTOuser(name,password)VALUES('lisi','123456');INSERTINTOuser(name,password)VALUES('wangwu','123456');使用SELECT語句查詢user表,查詢結果如下圖所示。STEP0311.2.5ResultSetHandler實現類在項目在添加jar包將下載的DBUtils工具的JAR包commons-dbutils-1.7.jar添加到項目的lib目錄中,并將第10章中JDBCUtils.java復制到cn.itcast.chapter11.example包下。STEP0411.2.5ResultSetHandler實現類編寫通用的查詢方法在chapter11項目的cn.itcast.chapter11.example包中創(chuàng)建一個名為BaseDao的類,在該類中編寫一個通用的查詢方法。STEP0511.2.5ResultSetHandler實現類編寫User實體類在cn.itcast.chapter11.example包下創(chuàng)建實體類User,用于封裝User對象。publicclassUser{ privateintid; privateStringname; privateStringpassword; //省略getter/setter方法}

STEP0611.2.5ResultSetHandler實現類演示BeanHandler類處理結果集在cn.itcast.chapter11.example包下創(chuàng)建類ResultSetTest1,用于演示BeanHandler類對結果集的處理。STEP0711.2.5ResultSetHandler實現類運行ResultSetTest1類運行ResultSetTest1類中的main()方法,運行結果如下圖所示。由圖中的輸出結果可以看出,BeanHandler已成功將id為1的數據存入到了實體對象user中。STEP0811.2.5ResultSetHandler實現類演示BeanListHandler類處理結果集在cn.itcast.chapter11.example包下創(chuàng)建ResultSetTest2類,用于演示BeanListHandler類對結果集的處理。STEP0911.2.5ResultSetHandler實現類運行ResultSetTest2類由此可見,testBeanListHandler()方法可以將每一行的數據都封裝到user實體對象中,并將其存放到list中。運行ResultSetTest2類中的main()方法,運行結果如下圖所示。STEP01ColumnListHandler和ScalarHandler類可以對指定的列數據進行封裝,在封裝時,查詢指定列數據,然后將獲得的列數據封裝到容器中。ColumnListHandler和ScalarHandler的對比如下表所示。STEP03ColumnListHandler和ScalarHandler11.2.5ResultSetHandler實現類類名稱相同點不同點ColumnListHandler都是對指定列的查詢結果集進行封裝封裝指定列的所有數據,將他們放入一個List集合中ScalarHandler封裝單條列數據,也可以封裝類似count、avg、max、min、sum等聚合函數的執(zhí)行結果注意:ColumnListHandler可以對指定列的所有數據進行封裝,ScalarHandler主要針對單行單列的數據進行封裝。STEP0111.2.5ResultSetHandler實現類在使用DBUtils工具操作數據庫時,如果需要輸出結果集中所有數據的值,可以使用ColumnListHandler類。下面通過一個案例演示ColumnListHandler類的使用。在cn.itcast.chapter11.example包下創(chuàng)建ResultSetTest3類,用于演示ColumnListHandler類的使用方法。ResultSetTest3類的實現如下所示。publicclassResultSetTest3{publicstaticvoidtestColumnListHandler()throwsSQLException{BaseDaobasedao=newBaseDao();Stringsql="select*fromuser";Objectarr=(Object)basedao.query(sql,newColumnListHandler("name"));System.out.println(arr);}publicstaticvoidmain(String[]args)throwsSQLException{testColumnListHandler();}}STEP0211.2.5ResultSetHandler實現類運行ResultSetTest3類中的main()方法,控制臺輸出結果如下圖所示。由圖中的輸出結果可以看出,ColumnListHandler類成功打印出了user表中的所有name信息。

STEP0111.2.5ResultSetHandler實現類在使用DBUtils工具操作數據庫時,如果需要輸出結果集中一行數據的指定字段值,可以使用ScalarHandler類。下面通過一個案例演示ScalarHandler類的使用。在cn.itcast.chapter11.example包下創(chuàng)建ResultSetTest4類,用于演示ScalarHandler類的使用方法。ResultSetTest4類的實現如下所示。publicclassResultSetTest4{ publicstaticvoidtestScalarHandler()throwsSQLException{ BaseDaobasedao=newBaseDao(); Stringsql="select*fromuserwhereid=?"; Objectarr=(Object)basedao.query(sql,newScalarHandler("name"),1); System.out.println(arr); } publicstaticvoidmain(String[]args)throwsSQLException{ testScalarHandler(); }}STEP0211.2.5ResultSetHandler實現類運行ResultSetTest4類中的main()方法,控制臺輸出結果如下圖所示。11.2.6動手實踐:使用DBUtils實現增刪改查先定一個小目標!

先定一個小目標!使用DBUtils實現數據的增刪改查STEP01由于每次操作數據庫時,都需要加載數據庫驅動、建立數據庫連接以及關閉數據庫連接,為了避免代碼的重復書寫,需要建立一個專門用于操作數據庫的工具類。使用DBUtils工具對數據庫中的用戶信息進行增刪改查操作,首先要創(chuàng)建用戶實體類User類,與數據庫中user表中的數據進行映射;然后創(chuàng)建一個工具類,用于創(chuàng)建數據源對象;最后創(chuàng)建增刪改查操作的DAO類,在各個DAO類中編寫其對應的增刪改查邏輯。STEP03使用DBUtils實現增刪改查的思路11.2.6動手實踐:使用DBUtils實現增刪改查STEP01搭建開發(fā)環(huán)境11.2.6動手實踐:使用DBUtils實現增刪改查本任務使用11.2.5小節(jié)在jdbc數據庫中創(chuàng)建的user表作為數據表,使用DBUtils工具對user表進行增刪改查操作。STEP02創(chuàng)建JavaBean11.2.6動手實踐:使用DBUtils實現增刪改查本任務使用User.java作為JavaBean,在項目chapter11的目錄下,創(chuàng)建一個名為cn.itcast.jdbc.javabean的包,將User.java復制到該包下。STEP03創(chuàng)建C3p0Utils工具類11.2.6動手實踐:使用DBUtils實現增刪改查在項目chapter11的src目錄下,創(chuàng)建一個名為cn.itcast.jdbc.utils的包,然后在該包下創(chuàng)建C3p0Utils類,用于創(chuàng)建數據源。C3p0Utils類的實現如下所示。publicclassC3p0Utils{ privatestaticDataSourceds; static{ ds=newComboPooledDataSource(); } publicstaticDataSourcegetDataSource(){ returnds; }}STEP04創(chuàng)建InsertDao類,完成插入操作11.2.6動手實踐:使用DBUtils實現增刪改查在項目chapter11的src目錄下,創(chuàng)建一個名為cn.itcast.jdbc.dao的包,然后在該包下創(chuàng)建一個InsertDao類,實現對user表插入數據的操作。InsertDao類的實現如下所示。publicclassInsertDao{publicstaticvoidmain(String[]args)throwsSQLException{//創(chuàng)建QueryRunner對象QueryRunnerrunner=newQueryRunner(C3p0Utils.getDataSource());Stringsql="insertintouser(name,password)values ('hello1',123456)";intnum=runner.update(sql);if(num>0){System.out.println("添加成功!");}else{System.out.println("添加失??!");}}}STEP0511.2.6動手實踐:使用DBUtils實現增刪改查文件InsertDao的運行結果如下圖所示。STEP0611.2.6動手實踐:使用DBUtils實現增刪改查向MySQL數據庫發(fā)送查詢語句,查詢結果如下所示。STEP0711.2.6動手實踐:使用DBUtils實現增刪改查創(chuàng)建UpdateDao類,完成修改操作在cn.itcast.jdbc.dao包下創(chuàng)建一個UpdateDao類,實現對user表數據的修改操作。UpdateDao類的實現如下所示。publicclassUpdateDao{publicstaticvoidmain(String[]args)throwsSQLException{//創(chuàng)建QueryRunner對象QueryRunnerrunner=newQueryRunner(C3p0Utils.getDataSource());//寫SQL語句Stringsql="updateusersetname=hello2,password=111111wherename=hello1";intnum=runner.update(sql);if(num>0){System.out.println("修改成功!");}else{System.out.println("修改失敗!");}}}STEP0811.2.6動手實踐:使用DBUtils實現增刪改查文件UpdateDao的運行結果如下圖所示。STEP0911.2.6動手實踐:使用DBUtils實現增刪改查向MySQL數據庫發(fā)送查詢語句,查詢結果如下所示。STEP1011.2.6動手實踐:使用DBUtils實現增刪改查創(chuàng)建DeleteDao類,完成刪除操作在cn.itcast.jdbc.dao包下創(chuàng)建一個DeleteDao類,實現對user表數據的刪除操作。DeleteDao類的實現如下所示。publicclassDeleteDao{publicstaticvoidmain(String[]args)throwsSQLException{//創(chuàng)建QueryRunner對象QueryRunnerrunner=newQueryRunner(C3p0Utils.getDataSource());//寫SQL語句Stringsql="deletefromuserwherename='hello2'";intnum=runner.update(sql);if(num>0){System.out.println("刪除成功!");}else{System.out.println("刪除失??!");}}}STEP1111.2.6動手實踐:使用DBUtils實現增刪改查文件DeleteDao的運行結果如下圖所示。STEP1211.2.6動手實踐:使用

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論