JAVA基礎之DBUtils與鏈接池

利用DBUtils進一步簡化JDBC數據庫的增刪改查的代碼,同時利用從鏈接池中接取鏈接,進而進行簡化和減小資源的消耗!java

1、DBUtils:mysql

一、DBUtils就是JDBC的簡化開發工具包。須要項目導入commons-dbutils-1.6.jar纔可以正常使用DBUtils工具。sql

二、DBUtils是java編程中的數據庫操做實用工具,小巧簡單實用。數據庫

DBUtils封裝了對JDBC的操做,簡化了JDBC操做,能夠少寫代碼。apache

Dbutils三個核心功能介紹編程

①、QueryRunner中提供對sql語句操做的API;oracle

②、 ResultSetHandler接口,用於定義select操做後,怎樣封裝結果集;dom

③、DbUtils類,它就是一個工具類,定義了關閉資源與事務處理的方法。工具

2、QueryRunner核心類:開發工具

一、update(Connection conn, String sql, Object... params) ,用來完成表數據的增長、刪除、更新操做(…是可變參數)  有返回值int

二、 query(Connection conn, String sql, ResultSetHandler<T> rsh, Object... params) ,用來完成表數據的查詢操做

3、update的增刪改:

// 新增
    public int addSort(Integer sid, String sname) throws SQLException {
        // 獲取鏈接對象
//        Connection conn = JDBCUtils.getConn();
        // 建立QueryRunner對象
//        QueryRunner qr = new QueryRunner();
        QueryRunner qr = new QueryRunner(MyDBUtils.getDataSource());
        String sql = "insert into sort values(?,?)";
//        int row = qr.update(conn, sql, sid, sname);
        int row = qr.update(sql, sid, sname);
        return row;
    }

    // 修改
    public int updateSort(Integer sid, String sname) throws SQLException {
        // 獲取鏈接對象
        Connection conn = JDBCUtils.getConn();
        // 建立QueryRunner對象
        QueryRunner qr = new QueryRunner();
        String sql = "update  sort set sname=? where sid=?";
        int row = qr.update(conn, sql, sname, sid);
        return row;
    }

    // 刪除
    public int deleteSort(Integer sid) throws SQLException {
        // 獲取鏈接對象
        Connection conn = JDBCUtils.getConn();
        // 建立QueryRunner對象
        QueryRunner qr = new QueryRunner();
        String sql = "delete from  sort  where sid=?";
        int row = qr.update(conn, sql, sid);
        return row;
    }

4、query查詢:

  query(Connection conn, String sql, ResultSetHandler<T> rsh, Object... params)

一、ResultSetHandler(是個接口,須要實現類)結果集處理類:

二、JavaBean:(實體類---之前的domain包)

JavaBean就是一個類,在開發中經常使用封裝數據。具備以下特性:

①、須要實現接口:java.io.Serializable ,一般實現接口這步驟省略了,不會影響程序。

②、提供私有字段:private 類型 字段名;

③、提供getter/setter方法:

④、提供無參構造

 

// ArrayListHandler查詢
    public List<Object[]> get1() throws SQLException {
        // 獲取鏈接對象
        Connection conn = JDBCUtils.getConn();
        // 建立QueryRunner對象
        QueryRunner qr = new QueryRunner();
        String sql = "select * from sort ";
        List<Object[]> obj = qr.query(conn, sql, new ArrayListHandler());
        return obj;
    }

    // BeanHandler查詢
    public Sort get2(Integer sid, String sname) throws SQLException {
        // 獲取鏈接對象
        Connection conn = JDBCUtils.getConn();
        // 建立QueryRunner對象
        QueryRunner qr = new QueryRunner();
        String sql = "select * from sort where sid = ? and sname = ?";
        Sort sort = qr.query(conn, sql, new BeanHandler<Sort>(Sort.class), sid, sname);
        return sort;
    }

    // BeanListHandler查詢
    public List<Sort> get3() throws SQLException {
        // 獲取鏈接對象
        Connection conn = JDBCUtils.getConn();
        // 建立QueryRunner對象
        QueryRunner qr = new QueryRunner();
        String sql = "select * from sort ";
        List<Sort> sort = qr.query(conn, sql, new BeanListHandler<Sort>(Sort.class));
        return sort;
    }
    //ColumnListHandler查詢
    public List<String> get4() throws SQLException {
        // 獲取鏈接對象
        Connection conn = JDBCUtils.getConn();
        // 建立QueryRunner對象
        QueryRunner qr = new QueryRunner();
        String sql = "select * from sort ";
        List<String> list = qr.query(conn, sql, new ColumnListHandler<String>("sname"));
        return list;
    }
    //ScalarHandler查詢
    public Integer get5() throws SQLException {
        // 獲取鏈接對象
//        Connection conn = JDBCUtils.getConn();
        // 建立QueryRunner對象
        QueryRunner qr = new QueryRunner(MyDBUtils.getDataSource());
        String sql = "select count(*) from sort ";
        Long count = qr.query( sql, new ScalarHandler<Long>());
        //Long轉成Integer
        return count.intValue();
    }

5、鏈接池:

一、概述:

  用池來管理Connection,這樣能夠重複使用Connection。有了池,因此咱們就不用本身來建立Connection,而是經過池來獲取Connection對象。當使用完Connection後,調用Connection的close()方法也不會真的關閉Connection,而是把Connection「歸還」給池。池就能夠再利用這個Connection對象了。(不調用的話自動歸還)

二、規範:

  Java爲數據庫鏈接池提供了公共的接口:javax.sql.DataSource,各個廠商須要讓本身的鏈接池實現這個接口。這樣應用程序能夠方便的切換不一樣廠商的鏈接池!

常見的鏈接池:DBCP、C3P0。

三、DBCP鏈接池:

①、導包:commons-dbcp-1.4.jar       commons-pool-1.5.6.jar

②、編寫工具類:

鏈接數據庫表的工具類, 採用DBCP鏈接池的方式來完成,Java中提供了一個鏈接池的規則接口 :

  DataSource : 它是java中提供的鏈接池,做爲 DriverManager 工具的替代項。在DBCP包中提供了DataSource接口的實現類,咱們要用的具體的鏈接池 BasicDataSource類:

package com.oracle.tools;

import javax.sql.DataSource;

import org.apache.commons.dbcp.BasicDataSource;

public class MyDBUtils {
    public static final String DRIVER = "com.mysql.jdbc.Driver";
    public static final String URL = "jdbc:mysql://localhost:3306/java0603?useUnicode=true&characterEncoding=UTF-8";
    public static final String USERNAME = "root";
    public static final String PASSWORD = "123456";
    /*
     * 建立鏈接池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;
    }
}

三、常見配置項:

相關文章
相關標籤/搜索