1. 程式人生 > >java----day30(DBUtils和連線池)

java----day30(DBUtils和連線池)

DBUtils

  • 概述

DBUtils是java程式設計中的資料庫操作實用工具,小巧簡單實用。

DBUtils封裝了對JDBC的操作,簡化了JDBC操作,可以少寫程式碼。

Dbutils三個核心功能介紹

  1. QueryRunner中提供對sql語句操作的API.
  2. ResultSetHandler介面,用於定義select操作後,怎樣封裝結果集.
  3. DbUtils類,它就是一個工具類,定義了關閉資源與事務處理的方法
  • QueryRunner核心類
  1. update(Connection conn, String sql, Object... params) ,用來完成表資料的增加、刪除、更新操作
  2. 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就是一個類,在開發中常用封裝資料。具有如下特性

  1. 需要實現介面:java.io.Serializable ,通常實現介面這步驟省略了,不會影響程式。
  2. 提供私有欄位:private 型別 欄位名;
  3. 提供getter/setter方法:
  4. 提供無參構造
/*
 * 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的操作

常用類與方法

  1. QueryRunner 用來執行SQL語句物件
  2. update(Connection conn, String sql, Object… params) 插入表記錄、更新表記錄、刪除表記錄
  3. query(Connection conn, String sql, ResultSetHandler handler, Object… params) 查詢表記錄
  4. ResultSetHandler 處理結果集的物件
  • DBCP連線池

作用:自身維護了多個Connection連線物件維護

  1. BasicDataSource類  是  DataSource介面的實現類
  2. DataSource介面,它是java與每種資料庫連線池 連線的規範標準