java基礎專欄—DBUtils(2)

DBUtils

​ 簡化開發的冗餘代碼java

  • QueryRunner中提供SQL語句操做API
  • ResultSetHandler接口,用於定義select操做後怎樣處理結果集
  • DBUtils對於一切事物的關閉類
  • 是線程安全的

事務

轉帳操做mysql

​ 將對個Sql操做封裝成一個事務對象,它有返回值,執行成功就返回ture,否者返回false.而後對事務進行回滾(rollback)不破壞原有數據web

public static int update(Connection con,String sql,Object...Para)

QueryRunner

QueryRunner類的query方法
public T<T> query
(Connection con,String sql,ResultSetHandler r,Object...params)
public static void insert(){
	QueryRunner qr = new QueryRunner();
	String sql = 
      "INSERT INTO sort (sname,pass,desc)VALUE(?,?,?)"
	Object[] params = {"xxxx",123,"xxxx"};
  	int row = qr.update(con,sql,params);
  	DbUtils.closeQuiety(con);
}
public static void delete(){

}

ResultSetHandler

​ 結果集處理接口,對全部的查詢結果數據的處理類,每一種對應的實現類就是一種結果的處理方式sql

Function describle
ArrayHandler 將結果集封裝到Object[]數組中每一個元素就是一個字段的值
ArrayListHandler 將結果的每一條記錄封裝搭配Object[]中,在封裝到List中
將結果集中的第一條記錄封裝到指定JavaBean中
BeanListHandler 將結果的每條記錄封裝到JavaBean中,在封裝到List中
ColumnListHandler 將結果集中指定的列的字段值封裝到List中
ScalarHandler 用於單數據如:SELECT count(*) FROM 'table'
MapHandler
MapListHandler

既是以各類不一樣的方式來處理結果數據庫

ArrayHandler

//將結果集的第一行存儲到對象數組中Object[]
QueryRunner qr = new QueryRunner();
String sql = "SELECT * FROM sort";
//調用方法的query
Objcet[] objs = qr.query(con,sql,new ArrayHandler());
//遍歷查詢結果
for(Object[] obj:objcs){
 	//TODO   
}

ArrayListHandler

QueryRunner qr = new QueryRunner();
String sql = "SELECT * FROM sort";
List<Object[]> results = 
  qr.query(con,sql,new ArrayListHandler());
for(Object[] objs:results){
    for(Object obj:objs){
 		//TODO       
    }
}

==BeanHandler==

​ 實現BeanHandler的構造傳入的類必須用空參的構造器數組

//無論數據有多少隻把第一行封裝到bean對象
QueryRunner qr = newe QueryRunner();
String sql = "SELETE * FROM sort";
//BeanHandler沒有空參構造器
//public BeanHandler(Class c)傳遞Sort類的class文件對象
Sort s = qr.query(con,sql,new BeanHandler<Sort>(Sort.class));
//若是沒有這個結果集那麼被封裝到Bean的對象就是null

==BeanListHandler==

//將結果集的每一行封裝到JavaBean對象
QueryRunner qr = new QueryHandler();
String sql = "";
List<Sort> list = 
  qr.query(con,sql,new BeanListHandler<Sort>(Sort.class));
for(Sort s : list){
    //TODO
}

ColumnListHandler<T>

//將指定的列的數據封裝到List集合
QueryRunner qr = new QueryRunner();
String sql = "SELECT * FROM sort";
//在column中要拿那一列就要在sql語句中有體現
List<Object> list = 
  qr.query(con,sql,new ColumnListHandler<Object>("columnName"));
for(Object obj : list){
    //TODO
}

ScalerHandler<T>

​ 對於查詢之後只有一個結果的查詢適用安全

QueryRunner qr = new QueryRunner();
String sql = "SELECT count(*) FROM sort";
//必須保證結果的類型是肯定的才能夠肯定類型,否者都是Object
Object obj = qr.query(con,sql,new ScalerHandler);

MapHandler

QueryHandler qr = new QueryHandler();
String sql = "SELECT * FROM sort";
//返回值:map集合,Map接口的實現類。泛型
Map<String,Object> map = qr.query(con,sql,new MapHandler())
  	for(Object obj : map){
     	//TODO   
    }

MapListHandler

QueryHandler qr = new QueryHandler();
String sql = "SELECT * FROM sort";
List<Map<String,Object>> list = qr.query(con,sql,new MapListHandler());
	for(Map<String,Object> map :list){
        for(String key : map.getKey()){
            map.getValue(key);
        }
    }

鏈接池

​ 若是操做鏈接與釋放資源操做就會佔用大量的資源,特別是對於多用戶鏈接訪問的網絡程序服務器

規範:數據源的鏈接池都是由第三方提供,可是無論是誰提供都的實現javax.sql.DataSource網絡

DBCP

Tomcat:java的web服務器,內置了一個鏈接池,把咱們寫好的class文件放在Tomcat中,在運行是,Tomcat會監聽端口。ui

因此開發一個交互數據庫項目須要不少的jar包的支持

  • commons-dbcp.jar
  • commons-dbutils.jar
  • commons-pool.jar
  • mysql-connector-java-bin.jar
相關文章
相關標籤/搜索