數據庫開發四:JDBC數據庫開發進階三(commons-dbutils結果集處理器介紹)

出處:https://www.cnblogs.com/gdwkong/p/7633250.html
 common-dbutils.jar是Apache組織提供的一個對JDBC進行簡單封裝的開源工具類庫,使用它能夠簡化JDBC應用程序的開發,同時也不會影響程序的性能。

1、QueryRunner類

①update方法:

int update(String sql,Object...params) -->可執行增刪改語句
int update(Connection con,String sql,Object...params)-->需要調用者提供Connection,這說明本方法不再管理Connection。支持事務。

②query方法:

T query(String sql,ResultSetHandler rsh,Object...params)-->可執行查詢
    它會先得到ResultSet,然後調用rsh的handle()把rs轉換成需要的類型。
T query(Connection con,String sql,ResultSetHandler rsh,Object...params);支持事務。

2、ResultSetHandler接口:

BeanHandler(單行)-->構造器需要一個Class類型參數,用來把一行結果轉換成指定類型的javabean對象。
BeanListHandler(多行)-->構造器也是需要一個Class類型的參數,用來把一行結果集轉換成一個javabean,那麼多行就是轉換成List對象,一堆javabean
MapHandler(單行)-->把一行結果集轉換成Map對象
    一行記錄:
    sid     sname   age   gender
    1001     zs         99     male
    一個Map:
    {sid:1001, sname:zs, age:99, gender:male}
MapListHandler(多行) -->把一行記錄轉換成一個Map,多行就是多個Map,即List<Map>.
ScalarHandler(單行單列) -->通常用與“SELECT COUNT(*) FROM t_stu;”語句,結果集是單行單列的,它返回一個Object。

3示例

import cn.itcast.jdbc.JdbcUtils;
import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.handlers.*;
import org.junit.Test;
import java.sql.SQLException;
import java.util.List;
import java.util.Map;

public class Demo3 {
    @Test
    public void fun1() throws SQLException {
        QueryRunner qr = new QueryRunner(JdbcUtils.getDataSource());
        String sql = "INSERT INTO t_stu VALUES(?,?,?,?)";
        Object[] params = {1002,"lisi",99,"female"};
        qr.update(sql,params);
    }
    @Test
    public void fun2() throws SQLException {
        //創建QueryRunner,提供數據庫連接池對象
        QueryRunner qr = new QueryRunner(JdbcUtils.getDataSource());
        //給出sql模板
        String sql = "SELECT * FROM t_stu WHERE sid=?";
        //給出參數
        Object[] params = {1002};
        //執行query()方法,需要給出集處理器,即 ResultSetHandler的實現類對象
        //我們需要給的是BeanHandler,它實現了ResultSetHandler
        //它需要一個類型,然後它會把rs中的數據封裝到指定類型的javabean對象中,然後返回javabean對象
        Stu stu = qr.query(sql,new BeanHandler<Stu>(Stu.class),params);
        System.out.println(stu);
    }
    //BeanListHandler的應用,它是多行處理器
    //每行對象一個Stu對象
    @Test
    public void fun3() throws Exception{
        QueryRunner qr = new QueryRunner(JdbcUtils.getDataSource());
        String sql = "SELECT * FROM t_stu";
        List<Stu> stuList = qr.query(sql,new BeanListHandler<Stu>(Stu.class));
        System.out.println(stuList);
    }

    //MapHandler的應用,它是單行處理器,把一行轉換成一個Map對象
    @Test
    public void fun4() throws Exception{
        QueryRunner qr = new QueryRunner(JdbcUtils.getDataSource());
        String sql = "SELECT * FROM t_stu WHERE sid=?";
        Object[] params = {1001};
        Map map = qr.query(sql,new MapHandler(),params);
        System.out.println(map);
    }

    //MapListHandler,它是多行處理器,把每行都轉換成一個Map,即List<Map>
    @Test
    public void fun5() throws Exception{
        QueryRunner qr = new QueryRunner(JdbcUtils.getDataSource());
        String sql = "SELECT * FROM t_stu ";
        List<Map<String,Object>> mapList = qr.query(sql,new MapListHandler());
        System.out.println(mapList);
    }@Test
    //ScalarHandler,它是單行單列時使用,最爲合適。
    public void fun6() throws Exception{
        QueryRunner qr = new QueryRunner(JdbcUtils.getDataSource());
        String sql = "SELECT COUNT(*) FROM t_stu ";
        Number cnt = (Number) qr.query(sql,new ScalarHandler());
        long c = cnt.longValue();
        System.out.println(c);
    }
}
import cn.itcast.jdbc.JdbcUtils;
import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.handlers.*;
import org.junit.Test;
import java.sql.SQLException;
import java.util.List;
import java.util.Map;

public class Demo3 {
    @Test
    public void fun1() throws SQLException {
        QueryRunner qr = new QueryRunner(JdbcUtils.getDataSource());
        String sql = "INSERT INTO t_stu VALUES(?,?,?,?)";
        Object[] params = {1002,"lisi",99,"female"};
        qr.update(sql,params);
    }
    @Test
    public void fun2() throws SQLException {
        //創建QueryRunner,提供數據庫連接池對象
        QueryRunner qr = new QueryRunner(JdbcUtils.getDataSource());
        //給出sql模板
        String sql = "SELECT * FROM t_stu WHERE sid=?";
        //給出參數
        Object[] params = {1002};
        //執行query()方法,需要給出集處理器,即 ResultSetHandler的實現類對象
        //我們需要給的是BeanHandler,它實現了ResultSetHandler
        //它需要一個類型,然後它會把rs中的數據封裝到指定類型的javabean對象中,然後返回javabean對象
        Stu stu = qr.query(sql,new BeanHandler<Stu>(Stu.class),params);
        System.out.println(stu);
    }
    //BeanListHandler的應用,它是多行處理器
    //每行對象一個Stu對象
    @Test
    public void fun3() throws Exception{
        QueryRunner qr = new QueryRunner(JdbcUtils.getDataSource());
        String sql = "SELECT * FROM t_stu";
        List<Stu> stuList = qr.query(sql,new BeanListHandler<Stu>(Stu.class));
        System.out.println(stuList);
    }

    //MapHandler的應用,它是單行處理器,把一行轉換成一個Map對象
    @Test
    public void fun4() throws Exception{
        QueryRunner qr = new QueryRunner(JdbcUtils.getDataSource());
        String sql = "SELECT * FROM t_stu WHERE sid=?";
        Object[] params = {1001};
        Map map = qr.query(sql,new MapHandler(),params);
        System.out.println(map);
    }

    //MapListHandler,它是多行處理器,把每行都轉換成一個Map,即List<Map>
    @Test
    public void fun5() throws Exception{
        QueryRunner qr = new QueryRunner(JdbcUtils.getDataSource());
        String sql = "SELECT * FROM t_stu ";
        List<Map<String,Object>> mapList = qr.query(sql,new MapListHandler());
        System.out.println(mapList);
    }@Test
    //ScalarHandler,它是單行單列時使用,最爲合適。
    public void fun6() throws Exception{
        QueryRunner qr = new QueryRunner(JdbcUtils.getDataSource());
        String sql = "SELECT COUNT(*) FROM t_stu ";
        Number cnt = (Number) qr.query(sql,new ScalarHandler());
        long c = cnt.longValue();
        System.out.println(c);
    }
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章