java----day30(DBUtils和連線池)
DBUtils
- 概述
DBUtils是java程式設計中的資料庫操作實用工具,小巧簡單實用。
DBUtils封裝了對JDBC的操作,簡化了JDBC操作,可以少寫程式碼。
Dbutils三個核心功能介紹
- QueryRunner中提供對sql語句操作的API.
- ResultSetHandler介面,用於定義select操作後,怎樣封裝結果集.
- DbUtils類,它就是一個工具類,定義了關閉資源與事務處理的方法
- QueryRunner核心類
- update(Connection conn, String sql, Object... params) ,用來完成表資料的增加、刪除、更新操作
- query(Connection conn, String sql, ResultSetHandler<T> rsh, Object... params) ,用來完成表資料的查詢操作
- QueryRunner實現新增、更新、刪除操作
update(Connection conn, String sql, Object... params) ,用來完成表資料的增加、刪除、更新操作
//插入 String sql = "INSERT INTO zhangwu(name,money,parent) VALUES(?,?,?)"; Object[] params = {"股票收入", 5500, "收入"}; Connection conn = JDBCUtils.getConnection(); int line = qr.update(conn,sql,params); //更新 String sql = "UPDATE zhangwu SET money = money+1000 WHERE name=?"; Object[] params = {"股票收入"}; Connection conn = JDBCUtils.getConnection(); int line = qr.update(conn, sql, params); //刪除 String sql = "DELETE FROM zhangwu WHERE name = ?"; Object[] params = {"股票收入"}; Connection conn = JDBCUtils.getConnection(); int line = qr.update(conn, sql, params);
- QueryRunner實現查詢操作
query(Connection conn, String sql, ResultSetHandler<T> rsh, Object... params) ,用來完成表資料的查詢操作
ResultSetHandler結果集處理類
ArrayHandler |
將結果集中的第一條記錄封裝到一個Object[]陣列中,陣列中的每一個元素就是這條記錄中的每一個欄位的值 |
ArrayListHandler |
將結果集中的每一條記錄都封裝到一個Object[]陣列中,將這些陣列在封裝到List集合中。 |
BeanHandler |
將結果集中第一條記錄封裝到一個指定的javaBean中。 |
BeanListHandler |
將結果集中每一條記錄封裝到指定的javaBean中,將這些javaBean在封裝到List集合中 |
ColumnListHandler |
將結果集中指定的列的欄位值,封裝到一個List集合中 |
ScalarHandler |
它是用於單資料。例如select count(*) from 表操作。 |
MapHandler |
將結果集第一行封裝到Map集合中,Key 列名, Value 該列資料 |
MapListHandler |
將結果集第一行封裝到Map集合中,Key 列名, Value 該列資料,Map集合儲存到List集合 |
JavaBean
JavaBean就是一個類,在開發中常用封裝資料。具有如下特性
- 需要實現介面:java.io.Serializable ,通常實現介面這步驟省略了,不會影響程式。
- 提供私有欄位:private 型別 欄位名;
- 提供getter/setter方法:
- 提供無參構造
/*
* person類
*/
public class Person{
private String name;
private double sex;
public Person() {
super();
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public double getSex() {
return sex;
}
public void setSex(double sex) {
this.sex = sex;
}
@Override
public String toString() { //該方法可以省略
return "Person [name=" + name + ", sex=" + sex + "]";
}
}
ArrayHandler與ArrayListHandler查詢
ArrayHandler:將結果集中的第一條記錄封裝到一個Object[]陣列中,陣列中的每一個元素就是這條記錄中的每一個欄位的值
ArrayListHandler:將結果集中的每一條記錄都封裝到一個Object[]陣列中,將這些陣列在封裝到List集合中
BeanHandler與BeanListHandler查詢
BeanListHandler :將結果集中每一條記錄封裝到指定的javaBean中,將這些javaBean在封裝到List集合中
ColumnListHandler與ScalarHandler查詢
ColumnListHandler:將結果集中指定的列的欄位值,封裝到一個List集合中
ScalarHandler:它是用於單資料。例如select count(*) from 表操作
連線池
實際開發中“獲得連線”或“釋放資源”是非常消耗系統資源的兩個過程,為了解決此類效能問題,通常情況我們採用連線池技術,來共享連線Connection。這樣我們就不需要每次都建立連線、釋放連線了,這些操作都交給了連線池
- 連線池概述
用池來管理Connection,這樣可以重複使用Connection。有了池,所以我們就不用自己來建立Connection,而是通過池來獲取Connection物件。當使用完Connection後,呼叫Connection的close()方法也不會真的關閉Connection,而是把Connection“歸還”給池。池就可以再利用這個Connection物件了
- 規範
Java為資料庫連線池提供了公共的介面:javax.sql.DataSource,各個廠商需要讓自己的連線池實現這個介面。這樣應用程式可以方便的切換不同廠商的連線池!
常見的連線池:DBCP、C3P0
- DBCP連線池
DBCP也是一個開源的連線池,是Apache Common成員之一,在企業開發中也比較常見,tomcat內建的連線池。
編寫工具類
連線資料庫表的工具類, 採用DBCP連線池的方式來完成,Java中提供了一個連線池的規則介面 :
DataSource : 它是java中提供的連線池,作為 DriverManager 工具的替代項。在DBCP包中提供了DataSource介面的實現類,我們要用的具體的連線池 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";
/*
* 建立連線池BasicDataSource
*/
public static BasicDataSource dataSource = new BasicDataSource();
//靜態程式碼塊
static {
//對連線池物件 進行基本的配置
dataSource.setDriverClassName(DRIVER); // 這是要連線的資料庫的驅動
dataSource.setUrl(URL); //指定要連線的資料庫地址
dataSource.setUsername(USERNAME); //指定要連線資料的使用者名稱
dataSource.setPassword(PASSWORD); //指定要連線資料的密碼
}
/*
* 返回連線池物件
*/
public static DataSource getDataSource(){
return dataSource;
}
}
常見配置項
分類 |
屬性 |
描述 |
必須項 |
driverClassName |
資料庫驅動名稱 |
url |
資料庫的地址 |
|
username |
使用者名稱 |
|
password |
密碼 |
|
基本項(擴充套件) |
maxActive |
最大連線數量 |
minIdle |
最小空閒連線 |
|
maxIdle |
最大空閒連線 |
|
initialSize |
初始化連線 |
參考文件:http://commons.apache.org/proper/commons-dbcp/configuration.html
總結
- DBUtils工具
作用:簡化JDBC的操作
常用類與方法
- QueryRunner 用來執行SQL語句物件
- update(Connection conn, String sql, Object… params) 插入表記錄、更新表記錄、刪除表記錄
- query(Connection conn, String sql, ResultSetHandler handler, Object… params) 查詢表記錄
- ResultSetHandler 處理結果集的物件
- DBCP連線池
作用:自身維護了多個Connection連線物件維護
- BasicDataSource類 是 DataSource介面的實現類
- DataSource介面,它是java與每種資料庫連線池 連線的規範標準