国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

java學習筆記—第三方操作數據庫包專門接收DataSource-dbutils (30)

2019-11-14 23:41:36
字體:
來源:轉載
供稿:網友
java學習筆記—第三方操作數據庫包專門接收DataSource-dbutils (30)

Dbutils

操作數據第三方包。依賴數據源DataSource(DBCP|C3p0)。

QueryRunner – 接收DataSource|Connection,查詢數據刪除修改操作。返回結果。

ResultSetHandler – 結果集句柄,將結果數據封裝成程序所需要的數據類型Map,List,Bean。

第一步:創建一個新的java項目

第二步:導入包

MySQL.jar

Dbcp.jar – 連接池的包。

Dbtutil.jar

第三步:創建dataSource數據源

driverClassName=com.mysql.jdbc.Driver

url=jdbc:mysql:///db909?characterEncoding=UTf8

username=root

passWord=1234

maxActive=5

工廠類創建一個唯一的dataSorcepackage cn.itcast.utils;import java.io.InputStream;import java.util.PRoperties;import javax.sql.DataSource;import org.apache.commons.dbcp.BasicDataSourceFactory;public class DataSourceUtils {    private static DataSource ds;    static{        try{            //讀取資源文件            InputStream in = DataSourceUtils.class                                .getClassLoader().getResourceAsStream("dbcp.properties");            //讀取資源對象            Properties prop = new Properties();            prop.load(in);            //創建ds            ds = new BasicDataSourceFactory().createDataSource(prop);        }catch(Exception e){            throw new RuntimeException(e.getMessage(),e);        }    }    //返回整個池對象    public static DataSource getDatasSource(){        return ds;    }}

第四步:開始測試dbutils的使用

Queryrunner.query 只可以執行select語句。

Queryrunner.update只可以接收update,delte,insert語句。

保存數據:

@Test    public void insert1() throws Exception{        QueryRunner run = new QueryRunner(getDatasSource());        String sql = "insert into users values('U002','李四','888')";        run.update(sql);    }    //接收?    @Test    public void insert2() throws Exception{        QueryRunner run = new QueryRunner(getDatasSource());        String sql = "insert into users values(?,?,?)";        run.update(sql,"U003","王五","7777");    }    //刪除    @Test    public void del1() throws Exception{        QueryRunner run = new QueryRunner(getDatasSource());        String sql = "delete from users where name=?";        int len = run.update(sql,"李四");        System.err.println(len);    }    @Test    public void udpate1() throws Exception{        QueryRunner run = new QueryRunner(getDatasSource());        String sql = "update users set name=? where id=?";        run.update(sql,"趙'七","U001");    }

查詢:

查詢時除了使用queryrunner還要使用別一個核心類resultsethandler:結果集的句本周 封裝結果到List,Map,Bean。

ArrayHandler,  - 用于查詢一行唯一的數據。Object[]QueryRunner run = new QueryRunner(getDatasSource());       String sql = "select * from users";       Object[] os = run.query(sql,new ArrayHandler());       for(Object o:os){           System.err.println(o);       }

結果是:

U001

趙'七

123

ArrayListHandler,  - 將所有的結果封裝成List<Object[]>        QueryRunner run = new QueryRunner(getDatasSource());        String sql = "select * from users";        List<Object[]> list = run.query(sql,new ArrayListHandler());        for(Object[] os:list){            for(Object o:os){                System.err.print(o+"/t");            }            System.err.println("/n=====");        }

返回的是:

U001 趙'七 123

=====

U002 AaA 44

=====

U003 88 777

=====

 BeanHandler,   - 返回一個 Bean,結果封裝到Bean。只查詢第一行。適合根據id查詢唯一的一行。@Test    public void query2() throws Exception{        QueryRunner run = new QueryRunner(getDatasSource());        String sql = "select * from users where id=?";        User user =                 run.query(sql,new BeanHandler<User>(User.class),"U003");        System.err.println(user);    }
BeanListHandler ,  - 返回List<Bean>所有行,都封裝到List,適合于查詢多個結果@Test    public void query3() throws Exception{        QueryRunner run = new QueryRunner(getDatasSource());        String sql = "select * from users";        List<User> us =                 run.query(sql,new BeanListHandler<User>(User.class));        for(User u:us){            System.err.println(u);        }            }

結果是:

User [id=U001, name=趙'七, pwd=123]

User [id=U002, name=AaA, pwd=44]

User [id=U003, name=88, pwd=777]

ColumnListHandler, - 查詢一個字段時就可以使用這種方式 select name from table;QueryRunner run = new QueryRunner(getDatasSource());        String sql = "select * from users";        List<Object> list = run.query(sql, new ColumnListHandler("pwd"));        for(Object o:list){            System.err.println(o);        }

 KeyedHandler -- QueryRunner run = new QueryRunner(getDatasSource());        String sql = "select * from users";        Map<Object,Map<String,Object>> mm =                 run.query(sql, new KeyedHandler("id"));        Iterator it = mm.keySet().iterator();        while(it.hasNext()){            Map m1 = mm.get(it.next());            System.err.println(m1.get("id")+","+m1.get("name")+","+m1.get("pwd"));        }

結果是:

{U001={id=U001, pwd=123, name=趙'七}, U002={id=U002, pwd=44, name=AaA}, U003={id=U003, pwd=777, name=88}}

, MapHandler ,  與 BeanHandler應,只返回第一行,封裝成Map類型 - 也適合于查詢一個結果集的    適合于關聯查詢,且沒有匹配的Bean。

MapListHandler ,  - List<Map>@Test    public void query6() throws Exception{        QueryRunner run = new QueryRunner(getDatasSource());        String sql = "SELECT u.name as uname,c.name as cname"+                     " FROM users u INNER JOIN contacts c ON u.id=c.uid";        System.err.println(sql);        List<Map<String,Object>> mm = run.query(sql,new MapListHandler());        System.err.println(mm);    }SELECT u.name as uname,c.name as cname FROM users u INNER JOIN contacts c ON u.id=c.uid[{uname=Jack, cname=Rose}, {uname=Jack, cname=李四}, {uname=Jack, cname=王五}, {uname=張三, cname=馬六}, {uname=張三, cname=趙七}]

ScalarHandler – 標量- 用于select count(1)|sum|avg|max &hellip;一些聚合函數@Test    public void query7() throws Exception{        QueryRunner run = new QueryRunner(getDatasSource());        String sql = "select count(*) from contacts";        Object o = run.query(sql,new ScalarHandler());        Integer ss = Integer.valueOf(o.toString());        System.err.println(ss);    }

總結:

1:包裝HttpServletRequest。是對getParaqmgermap增強。

2:用dbcp連接數據庫,并在一個項目中維護一個唯一的dataSource。

工廠類,一個datasource的成員靜態。

  Static代碼塊中讀取配置文件連接數據庫。創建datasource。

    提供一個工廠方法返回整個池對象。

3:dbutils的所有查詢方法

所有ResultSetHandler的子類做一次。

MapHandler

MapListHandler

BeanHandler

BeanListHandler

ScalerHandler



發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 湖口县| 贵州省| 全椒县| 榆中县| 新干县| 芷江| 鹰潭市| 胶州市| 德钦县| 湘阴县| 南华县| 滨海县| 台中市| 营山县| 宁蒗| 巨鹿县| 漠河县| 西乌珠穆沁旗| 星子县| 呼玛县| 额尔古纳市| 藁城市| 昭平县| 涿州市| 罗山县| 剑河县| 长治市| 宁海县| 宜春市| 南靖县| 邹平县| 南通市| 台前县| 徐汇区| 新晃| 开化县| 余干县| 潮安县| 喀喇| 翼城县| 柘荣县|