DBUtils工具類學習一


Commons DbUtils是Apache組織提供的一個對JDBC進行簡單封裝的開源工具類庫,使用它能夠簡化JDBC應用程序的開發,同時也不會影響程序的性能

1、特征

DBUtils是java編程中的數據庫操作實用工具,小巧簡單實用,
1.對於數據表的讀操作,他可以把結果轉換成List,Array,Set等java集合,便於程序員操作;
2.對於數據表的寫操作,也變得很簡單(只需寫sql語句)
3.可以使用數據源,使用JNDI,數據庫連接池等技術來優化性能--重用已經構建好的數據庫連接對象,而不像php,asp那樣,費時費力的不斷重復的構建和析構這樣的對象。

2、DBUtils提供了三個核心的功能

2.1QueryRunner中提供對sql語句操作的API

QueryRunner(DataSource ds),提供數據源(連接池),DBUtils底層自動維護了連接Connection
update(String sql, Object...params),執行更新數據
query(String sql,ResultSetHandler rsh,Object... params),執行查詢

2.2 ResultSetHandler接口,用於定義select操作后,怎樣封裝結果集

ArrayHandler:將結果集中的第一條記錄封裝到Object[]數組中,數組中的每一個元素即使這條記錄中的每一個字段的值
ArrayListHandler:將結果集中的每一條記錄封裝到Object[]數組中,將這些數組再封裝到List集合中
BeanHandler:將結果集中的第一條記錄封裝到一個指定的javabean中
BeanListHandler:將結果集中每一條記錄封裝到javabean中,將這些javabean再封裝到List集合中
ColumnListHandler:將結果集中指定列的字段值封裝到一個List集合中
KeyedHandler:將結果集中的每一條記錄封裝到Map<String,Object>,再講這個map集合作為另一個Map的value,另一個Map集合的key是指定的字段的值
MapHandler:將結果集中的第一條記錄封裝到Map<String,Object>集合中,key就是字段名稱,value就是字段的值
MapListHandler:將結果集中的每一條記錄封裝到Map<String,Object>集合中,key就是字段名稱,value就是字段的值,再將這些Map封裝到List集合中
ScalarHandler:它是用於單數據,列如:select count(1) from 表操作

2.3 DbUtils類,就是一個工具類,定義了關閉資源和事務處理的方法

closeQuietly(Connetion conn)關閉連接,有異常就會拋出
commitAndCloseQuietly(Connetion conn):提交並關閉連接
rollbackAndCloseQuietly(Connetion conn):回滾並關閉連接

3、DBUtils操作代碼demo

3.1maven依賴

<dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.44</version>
        </dependency>
        <dependency>
            <groupId>com.mchange</groupId>
            <artifactId>c3p0</artifactId>
            <version>0.9.5</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/commons-dbutils/commons-dbutils -->
        <dependency>
            <groupId>commons-dbutils</groupId>
            <artifactId>commons-dbutils</artifactId>
            <version>1.7</version>
        </dependency>

3.2QueryDbUtils代碼

package com.rookie.bigdata.dbutils;

import com.rookie.bigdata.domain.User;
import com.rookie.bigdata.util.C3P0Utils;
import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.handlers.BeanHandler;
import org.apache.commons.dbutils.handlers.BeanListHandler;
import org.apache.commons.dbutils.handlers.ScalarHandler;

import java.sql.SQLException;
import java.util.List;

/**
 * Created by dell on 2019/5/24.
 */
public class QueryDbUtils {

    public static void main(String[] args) {
        //insertMethod();
        //updateMethod();
        //deleteMethod();
        //selectAllUserMethod();
        //selectUserMethod();
        try {
            QueryRunner qr = new QueryRunner(C3P0Utils.getDataSource());
            String sql = "select count(*) from user ";
           Long count=(Long)qr.query(sql, new ScalarHandler());
            System.out.println(count);
        } catch (Exception e) {
            e.printStackTrace();
        }

    }

    //查詢單個用戶方法
    private static void selectUserMethod() {
        try {
            QueryRunner qr = new QueryRunner(C3P0Utils.getDataSource());
            String sql = "select * from user where username=?";
            Object[] params = {"李四"};
            User user = qr.query(sql, new BeanHandler<User>(User.class), params);

            System.out.println(user);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    //查詢所有的用戶信息
    private static void selectAllUserMethod() {
        try {
            QueryRunner qr = new QueryRunner(C3P0Utils.getDataSource());
            String sql = "select * from user";
            List<User> userList = qr.query(sql, new BeanListHandler<User>(User.class));

            for (User user : userList) {
                System.out.println(user);
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    //刪除操作
    private static void deleteMethod() {
        try {
            QueryRunner qr = new QueryRunner(C3P0Utils.getDataSource());
            String sql = "delete from user where username=?";
            Object[] params = {"李四"};
            int update = qr.update(sql, params);
            System.out.println("刪除了" + update + "記錄");
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    //更新記錄操作
    private static void updateMethod() {
        try {
            QueryRunner qr = new QueryRunner(C3P0Utils.getDataSource());
            String sql = "update user set password=? where username=?";
            Object[] params = {"654321", "李四"};
            int update = qr.update(sql, params);
            System.out.println("更新了" + update + "記錄");
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    /**
     * 查詢操作
     */
    private static void insertMethod() {
        try {
            // 1.創建核心類QueryRunner
            QueryRunner qr = new QueryRunner(C3P0Utils.getDataSource());
            // 2.編寫SQL語句
            String sql = "insert into user values(?,?)";
            // 3.為站位符設置值
            Object[] params = {"李四", "123456"};
            // 4.執行添加操作
            int rows = qr.update(sql, params);
            System.out.println("添加成功!" + rows);
        } catch (SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
}

C3P0Utils.java

package com.rookie.bigdata.util;

import com.mchange.v2.c3p0.ComboPooledDataSource;

import javax.sql.DataSource;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

/**
 * Created by dell on 2019/5/23.
 */
public class C3P0Utils {
    private static ComboPooledDataSource dataSource = new ComboPooledDataSource("mysql");

    public static DataSource getDataSource() {
        return dataSource;
    }

    public static Connection getConnection() {
        try {
            return dataSource.getConnection();
        } catch (SQLException e) {
            throw new RuntimeException(e);
        }
    }

    //釋放連接回連接池
    public static void close(Connection conn, PreparedStatement pst, ResultSet rs) {
        if (rs != null) {
            try {
                rs.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
        if (pst != null) {
            try {
                pst.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }

        if (conn != null) {
            try {
                conn.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
    }
}

User.java

package com.rookie.bigdata.domain;

/**
 * Created by dell on 2019/5/25.
 */
public class User {
    private String username;
    private String password;

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    @Override
    public String toString() {
        return "User{" +
                "username='" + username + '\'' +
                ", password='" + password + '\'' +
                '}';
    }
}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM