30_數(shù)據(jù)庫_第3天(DBUtils)_講義_第1頁
30_數(shù)據(jù)庫_第3天(DBUtils)_講義_第2頁
30_數(shù)據(jù)庫_第3天(DBUtils)_講義_第3頁
30_數(shù)據(jù)庫_第3天(DBUtils)_講義_第4頁
30_數(shù)據(jù)庫_第3天(DBUtils)_講義_第5頁
已閱讀5頁,還剩8頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

傳智播客專注于Java、.Net和Php、網(wǎng)頁平面設(shè)計工程師的培訓第30天 DBUtils和連接池今日內(nèi)容介紹u DBUtilsu 連接池第1章 DBUtils如果只使用JDBC進行開發(fā),我們會發(fā)現(xiàn)冗余代碼過多,為了簡化JDBC開發(fā),本案例我們講采用apache commons組件一個成員:DBUtils。DBUtils就是JDBC的簡化開發(fā)工具包。需要項目導入commons-dbutils-1.6.jar才能夠正常使用DBUtils工具。1.1 概述DBUtils是java編程中的數(shù)據(jù)庫操作實用工具,小巧簡單實用。DBUtils封裝了對JDBC的操作,簡化了JDBC操作,可以少寫代碼。Dbutils三個核心功能介紹l QueryRunner中提供對sql語句操作的API.l ResultSetHandler接口,用于定義select操作后,怎樣封裝結(jié)果集.l DbUtils類,它就是一個工具類,定義了關(guān)閉資源與事務處理的方法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實現(xiàn)添加、更新、刪除操作l update(Connection conn, String sql, Object. params) ,用來完成表數(shù)據(jù)的增加、刪除、更新操作1.3.1 添加public void insert()try /獲取一個用來執(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)建一個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)建一個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實現(xiàn)查詢操作l query(Connection conn, String sql, ResultSetHandler rsh, Object. params) ,用來完成表數(shù)據(jù)的查詢操作1.4.1 ResultSetHandler結(jié)果集處理類ArrayHandler將結(jié)果集中的第一條記錄封裝到一個Object數(shù)組中,數(shù)組中的每一個元素就是這條記錄中的每一個字段的值A(chǔ)rrayListHandler將結(jié)果集中的每一條記錄都封裝到一個Object數(shù)組中,將這些數(shù)組在封裝到List集合中。BeanHandler將結(jié)果集中第一條記錄封裝到一個指定的javaBean中。BeanListHandler將結(jié)果集中每一條記錄封裝到指定的javaBean中,將這些javaBean在封裝到List集合中ColumnListHandler將結(jié)果集中指定的列的字段值,封裝到一個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就是一個類,在開發(fā)中常用封裝數(shù)據(jù)。具有如下特性1. 需要實現(xiàn)接口:java.io.Serializable ,通常實現(xiàn)接口這步驟省略了,不會影響程序。2. 提供私有字段:private 類型 字段名;3. 提供getter/setter方法:4. 提供無參構(gòu)造/* * 賬務類 */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é)果集中的第一條記錄封裝到一個Object數(shù)組中,數(shù)組中的每一個元素就是這條記錄中的每一個字段的值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é)果集中的每一條記錄都封裝到一個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é)果集中第一條記錄封裝到一個指定的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é)果集中指定的列的字段值,封裝到一個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章 連接池實際開發(fā)中“獲得連接”或“釋放資源”是非常消耗系統(tǒng)資源的兩個過程,為了解決此類性能問題,通常情況我們采用連接池技術(shù),來共享連接Connection。這樣我們就不需要每次都創(chuàng)建連接、釋放連接了,這些操作都交給了連接池2.1 連接池概述l 概念用池來管理Connection,這樣可以重復使用Connection。有了池,所以我們就不用自己來創(chuàng)建Connection,而是通過池來獲取Connection對象。當使用完Connection后,調(diào)用Connection的close()方法也不會真的關(guān)閉Connection,而是把Connection“歸還”給池。池就可以再利用這個Connection對象了。l 規(guī)范Java為數(shù)據(jù)庫連接池提供了公共的接口:javax.sql.DataSource,各個廠商需要讓自己的連接池實現(xiàn)這個接口。這樣應用程序可以方便的切換不同廠商的連接池!常見的連接池:DBCP、C3P0。接下來,我們就詳細的學習一下DBCP連接池。C3P0連接池我們在就業(yè)班學習。2.2 DBCP連接池 DBCP也是一個開源的連接池,是Apache Common成員之一,在企業(yè)開發(fā)中也比較常見,tomcat內(nèi)置的連接池。2.2.1 導入jar包2.2.2 編寫工具類連接數(shù)據(jù)庫表的工具類, 采用DBCP連接池的方式來完成,Java中提供了一個連接池的規(guī)則接口 :DataSource : 它是java中提供的連接池,作為 DriverManager 工具的替代項。在DBCP包中提供了DataSource接口的實現(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 /對連接池對象 進行基本的配置dataSource.setDriverClassName(DRIVER); / 這是要連接的數(shù)據(jù)庫的驅(qū)動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 /獲取一個用來執(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)建一個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)建一個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é)果集中第一條記錄封裝到一個指定的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 常見配置項分類屬性描述必須項driverClassName數(shù)據(jù)庫驅(qū)動名稱url數(shù)據(jù)庫的地址username用戶名password密碼基本項(擴展)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)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論