




已閱讀5頁,還剩8頁未讀, 繼續(xù)免費(fèi)閱讀
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
傳智播客專注于Java、.Net和Php、網(wǎng)頁平面設(shè)計(jì)工程師的培訓(xùn)第30天 DBUtils和連接池今日內(nèi)容介紹u DBUtilsu 連接池第1章 DBUtils如果只使用JDBC進(jìn)行開發(fā),我們會(huì)發(fā)現(xiàn)冗余代碼過多,為了簡化JDBC開發(fā),本案例我們講采用apache commons組件一個(gè)成員:DBUtils。DBUtils就是JDBC的簡化開發(fā)工具包。需要項(xiàng)目導(dǎo)入commons-dbutils-1.6.jar才能夠正常使用DBUtils工具。1.1 概述DBUtils是java編程中的數(shù)據(jù)庫操作實(shí)用工具,小巧簡單實(shí)用。DBUtils封裝了對JDBC的操作,簡化了JDBC操作,可以少寫代碼。Dbutils三個(gè)核心功能介紹l QueryRunner中提供對sql語句操作的API.l ResultSetHandler接口,用于定義select操作后,怎樣封裝結(jié)果集.l DbUtils類,它就是一個(gè)工具類,定義了關(guān)閉資源與事務(wù)處理的方法1.2 QueryRunner核心類l update(Connection conn, String sql, Object. params) ,用來完成表數(shù)據(jù)的增加、刪除、更新操作l query(Connection conn, String sql, ResultSetHandler rsh, Object. params) ,用來完成表數(shù)據(jù)的查詢操作1.3 QueryRunner實(shí)現(xiàn)添加、更新、刪除操作l update(Connection conn, String sql, Object. params) ,用來完成表數(shù)據(jù)的增加、刪除、更新操作1.3.1 添加public void insert()try /獲取一個(gè)用來執(zhí)行SQL語句的對象 QueryRunnerQueryRunner qr = new QueryRunner();String sql = INSERT INTO zhangwu(name,money,parent) VALUES(?,?,?);Object params = 股票收入, 5500, 收入;Connection conn = JDBCUtils.getConnection();int line = qr.update(conn,sql,params);/ 用來完成表數(shù)據(jù)的增加、刪除、更新操作/結(jié)果集處理System.out.println(line = + line); catch (SQLException e) throw new RuntimeException(e);1.3.2 更新public void update()try /創(chuàng)建一個(gè)QueryRunner對象,用來完成SQL語句的執(zhí)行QueryRunner qr = new QueryRunner();/執(zhí)行SQL語句String sql = UPDATE zhangwu SET money = money+1000 WHERE name=?;Object params = 股票收入;Connection conn = JDBCUtils.getConnection();int line = qr.update(conn, sql, params);/結(jié)果集的處理System.out.println(line=+line); catch (SQLException e) throw new RuntimeException(e);1.3.3 刪除public void delete()try /創(chuàng)建一個(gè)QueryRunner對象,用來完成SQL語句的執(zhí)行QueryRunner qr = new QueryRunner();/執(zhí)行SQL語句String sql = DELETE FROM zhangwu WHERE name = ?;Object params = 股票收入;Connection conn = JDBCUtils.getConnection();int line = qr.update(conn, sql, params);/結(jié)果集的處理System.out.println(line=+line); catch (SQLException e) throw new RuntimeException(e);1.4 QueryRunner實(shí)現(xiàn)查詢操作l query(Connection conn, String sql, ResultSetHandler rsh, Object. params) ,用來完成表數(shù)據(jù)的查詢操作1.4.1 ResultSetHandler結(jié)果集處理類ArrayHandler將結(jié)果集中的第一條記錄封裝到一個(gè)Object數(shù)組中,數(shù)組中的每一個(gè)元素就是這條記錄中的每一個(gè)字段的值A(chǔ)rrayListHandler將結(jié)果集中的每一條記錄都封裝到一個(gè)Object數(shù)組中,將這些數(shù)組在封裝到List集合中。BeanHandler將結(jié)果集中第一條記錄封裝到一個(gè)指定的javaBean中。BeanListHandler將結(jié)果集中每一條記錄封裝到指定的javaBean中,將這些javaBean在封裝到List集合中ColumnListHandler將結(jié)果集中指定的列的字段值,封裝到一個(gè)List集合中ScalarHandler它是用于單數(shù)據(jù)。例如select count(*) from 表操作。MapHandler將結(jié)果集第一行封裝到Map集合中,Key 列名, Value 該列數(shù)據(jù)MapListHandler將結(jié)果集第一行封裝到Map集合中,Key 列名, Value 該列數(shù)據(jù),Map集合存儲到List集合1.4.2 JavaBeanJavaBean就是一個(gè)類,在開發(fā)中常用封裝數(shù)據(jù)。具有如下特性1. 需要實(shí)現(xiàn)接口:java.io.Serializable ,通常實(shí)現(xiàn)接口這步驟省略了,不會(huì)影響程序。2. 提供私有字段:private 類型 字段名;3. 提供getter/setter方法:4. 提供無參構(gòu)造/* * 賬務(wù)類 */public class ZhangWu private int id;private String name;private double money;private String parent;public ZhangWu() super();public int getId() return id;public void setId(int id) this.id = id;public String getName() return name;public void setName(String name) = name;public double getMoney() return money;public void setMoney(double money) this.money = money;public String getParent() return parent;public void setParent(String parent) this.parent = parent;Overridepublic String toString() /該方法可以省略return ZhangWu id= + id + , name= + name + , money= + money + , parent= + parent + ;1.4.3 ArrayHandler與ArrayListHandler查詢l ArrayHandler:將結(jié)果集中的第一條記錄封裝到一個(gè)Object數(shù)組中,數(shù)組中的每一個(gè)元素就是這條記錄中的每一個(gè)字段的值public class ArrayHandlerDemo Testpublic void method()try /獲取QueryRunner對象QueryRunner qr = new QueryRunner();/執(zhí)行SQL語句String sql = SELECT * FROM zhangwu;Object params = ;Connection conn = JDBCUtils.getConnection();Object objArray = qr.query(conn, sql, new ArrayHandler(), params);/結(jié)果集的處理System.out.println( Arrays.toString(objArray) );conn.close(); catch (SQLException e) e.printStackTrace();l ArrayListHandler:將結(jié)果集中的每一條記錄都封裝到一個(gè)Object數(shù)組中,將這些數(shù)組在封裝到List集合中。public class ArrayListHandlerDemo Testpublic void method()try /獲取QueryRunner對象QueryRunner qr = new QueryRunner();/執(zhí)行SQL語句String sql = SELECT * FROM zhangwu WHERE money?;Object params = 2000;Connection conn = JDBCUtils.getConnection(); List list = qr.query(conn, sql, new ArrayListHandler(), params);/結(jié)果集的處理 for (Object objArray : list) System.out.println( Arrays.toString(objArray) );conn.close(); catch (SQLException e) e.printStackTrace();1.4.4 BeanHandler與BeanListHandler查詢l BeanHandler:將結(jié)果集中第一條記錄封裝到一個(gè)指定的javaBean中。public class BeanHandlerDemo Testpublic void method()try/獲取QueryRunner QueryRunner qr = new QueryRunner();/執(zhí)行SQL語句String sql = SELECT * FROM zhangwu WHERE id=?;Object params = 1;Connection conn = JDBCUtils.getConnection();ZhangWu zw = qr.query(conn, sql, new BeanHandler(ZhangWu.class), params);/結(jié)果集處理System.out.println(zw);conn.close(); catch(SQLException e)throw new RuntimeException(e);l BeanListHandler:將結(jié)果集中每一條記錄封裝到指定的javaBean中,將這些javaBean在封裝到List集合中public class BeanListHandlerDemo Testpublic void method()try/獲取QueryRunner QueryRunner qr = new QueryRunner();/執(zhí)行SQL語句String sql = SELECT * FROM zhangwu WHERE money?;Object params = 2000;Connection conn = JDBCUtils.getConnection();List list = qr.query(conn, sql, new BeanListHandler(ZhangWu.class), params);/結(jié)果集處理for (ZhangWu zw : list) System.out.println(zw);conn.close(); catch(SQLException e)throw new RuntimeException(e);1.4.5 ColumnListHandler與ScalarHandler查詢l ColumnListHandler:將結(jié)果集中指定的列的字段值,封裝到一個(gè)List集合中public class ColumnListHandlerDemo Testpublic void method()try /獲取QueryRunner對象QueryRunner qr = new QueryRunner();/執(zhí)行SQL語句String sql = SELECT name FROM zhangwu WHERE money?;Object params = 2000;Connection conn = JDBCUtils.getConnection();List list = qr.query(conn, sql, new ColumnListHandler(), params); /結(jié)果集的處理for (String str : list) System.out.println(str);conn.close(); catch (SQLException e) e.printStackTrace();l ScalarHandler:它是用于單數(shù)據(jù)。例如select count(*) from 表操作。public class ScalarHandlerDemo Testpublic void method()try /獲取QueryRunner對象QueryRunner qr = new QueryRunner();/執(zhí)行SQL語句String sql = SELECT MAX(money) FROM zhangwu;Object params = ;Connection conn = JDBCUtils.getConnection();Double max = qr.query(conn, sql, new ScalarHandler(), params);/結(jié)果集的處理System.out.println(max= + max);conn.close(); catch (SQLException e) e.printStackTrace();第2章 連接池實(shí)際開發(fā)中“獲得連接”或“釋放資源”是非常消耗系統(tǒng)資源的兩個(gè)過程,為了解決此類性能問題,通常情況我們采用連接池技術(shù),來共享連接Connection。這樣我們就不需要每次都創(chuàng)建連接、釋放連接了,這些操作都交給了連接池2.1 連接池概述l 概念用池來管理Connection,這樣可以重復(fù)使用Connection。有了池,所以我們就不用自己來創(chuàng)建Connection,而是通過池來獲取Connection對象。當(dāng)使用完Connection后,調(diào)用Connection的close()方法也不會(huì)真的關(guān)閉Connection,而是把Connection“歸還”給池。池就可以再利用這個(gè)Connection對象了。l 規(guī)范Java為數(shù)據(jù)庫連接池提供了公共的接口:javax.sql.DataSource,各個(gè)廠商需要讓自己的連接池實(shí)現(xiàn)這個(gè)接口。這樣應(yīng)用程序可以方便的切換不同廠商的連接池!常見的連接池:DBCP、C3P0。接下來,我們就詳細(xì)的學(xué)習(xí)一下DBCP連接池。C3P0連接池我們在就業(yè)班學(xué)習(xí)。2.2 DBCP連接池 DBCP也是一個(gè)開源的連接池,是Apache Common成員之一,在企業(yè)開發(fā)中也比較常見,tomcat內(nèi)置的連接池。2.2.1 導(dǎo)入jar包2.2.2 編寫工具類連接數(shù)據(jù)庫表的工具類, 采用DBCP連接池的方式來完成,Java中提供了一個(gè)連接池的規(guī)則接口 :DataSource : 它是java中提供的連接池,作為 DriverManager 工具的替代項(xiàng)。在DBCP包中提供了DataSource接口的實(shí)現(xiàn)類,我們要用的具體的連接池 BasicDataSource類public class JDBCUtils public static final String DRIVER = com.mysql.jdbc.Driver;public static final String URL = jdbc:mysql:/localhost:3306/daydb;public static final String USERNAME = root;public static final String PASSWORD = root;/* * 創(chuàng)建連接池BasicDataSource */public static BasicDataSource dataSource = new BasicDataSource();/靜態(tài)代碼塊static /對連接池對象 進(jìn)行基本的配置dataSource.setDriverClassName(DRIVER); / 這是要連接的數(shù)據(jù)庫的驅(qū)動(dòng)dataSource.setUrl(URL); /指定要連接的數(shù)據(jù)庫地址dataSource.setUsername(USERNAME); /指定要連接數(shù)據(jù)的用戶名dataSource.setPassword(PASSWORD); /指定要連接數(shù)據(jù)的密碼/* * 返回連接池對象 */public static DataSource getDataSource()return dataSource;2.2.3 工具類的使用l 測試類/* * 演示使用DBUtils工具 完成數(shù)據(jù)庫表的增加操作 */public class Demo / 插入功能 Testpublic void insert()try /獲取一個(gè)用來執(zhí)行SQL語句的對象 QueryRunnerQueryRunner qr = new QueryRunner(JDBCUtils.getDataSource();String sql = INSERT INTO zhangwu(name,money,parent) VALUES(?,?,?);Object params = 股票收入, 5500, 收入; int line = qr.update(sql,params);/結(jié)果集處理System.out.println(line = + line); catch (SQLException e) throw new RuntimeException(e);/刪除功能Testpublic void delete()try /創(chuàng)建一個(gè)QueryRunner對象,用來完成SQL語句的執(zhí)行QueryRunner qr = new QueryRunner(JDBCUtils.getDataSource();/執(zhí)行SQL語句String sql = DELETE FROM zhangwu WHERE name = ?;Object params = 股票收入;int line = qr.update(sql, params);/結(jié)果集的處理System.out.println(line=+line); catch (SQLException e) throw new RuntimeException(e);/更新功能Testpublic void update()try /創(chuàng)建一個(gè)QueryRunner對象,用來完成SQL語句的執(zhí)行QueryRunner qr = new QueryRunner(JDBCUtils.getDataSource();/執(zhí)行SQL語句String sql = UPDATE zhangwu SET money = money+1000 WHERE name=?;Object params = 股票收入;int line = qr.update(sql, params);/結(jié)果集的處理System.out.println(line=+line); catch (SQLException e) throw new RuntimeException(e);/查詢功能,將結(jié)果集中第一條記錄封裝到一個(gè)指定的javaBean中。Testpublic void search()try/獲取QueryRunner QueryRunner qr = new QueryRunner(JDBCUtils.getDataSource();/執(zhí)行SQL語句String sql = SELECT * FROM zhangwu;Object params = ;Product p = qr.query(sql, new BeanHandler(Product.class), params);/結(jié)果集處理System.out.println(p); catch(SQLException e)throw new RuntimeException(e);2.2.4 常見配置項(xiàng)分類屬性描述必須項(xiàng)driverClassName數(shù)據(jù)庫驅(qū)動(dòng)名稱url數(shù)據(jù)庫的地址username用戶名password密碼基本項(xiàng)(擴(kuò)展)maxActive最大連接數(shù)量minIdle最小空閑連接maxIdle 最大空閑連接initialSize初始化連接參考文檔:http:/com
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 餐廳食品安全風(fēng)險(xiǎn)評估與防控合同
- 綜合體大樓特色主題空間裝修工程合同
- 汽車抵押貸款擔(dān)保協(xié)議
- 無人機(jī)傾斜攝影驗(yàn)收專題報(bào)告
- 髕骨脫位的治療效果評估
- 教育培訓(xùn)公關(guān)案例
- 超市商品盤點(diǎn)流程規(guī)范
- 腫瘤患者血凝管理
- 兒科心血管護(hù)理
- 人類遺傳資源管理培訓(xùn)
- 云計(jì)算試題及答案
- 政治●湖北卷丨2024年湖北省普通高中學(xué)業(yè)水平選擇性考試政治試卷及答案
- 中醫(yī)醫(yī)院現(xiàn)代醫(yī)院管理制度章程
- 無錫市2024-2025學(xué)年四年級下學(xué)期數(shù)學(xué)期末試題一(有答案)
- 2024年醫(yī)生三基三嚴(yán)模擬習(xí)題(附答案解析)
- 2025春季學(xué)期國家安全教育期末考試-國開(XJ)-參考資料
- 醫(yī)學(xué)教育常識考試試題及答案
- 智能在線問卷調(diào)查系統(tǒng)開發(fā)合同
- 汽車4S店展廳布局設(shè)計(jì)
- 酒店客房經(jīng)理培訓(xùn)
- 2025年廣東省珠海市香洲區(qū)5月中考模擬化學(xué)試題(含答案)
評論
0/150
提交評論