当前位置: 移动技术网 > IT编程>开发语言>Java > DBUtils工具类学习一

DBUtils工具类学习一

2019年05月26日  | 移动技术网IT编程  | 我要评论

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 + '\'' +
                '}';
    }
}

如对本文有疑问, 点击进行留言回复!!

相关文章:

验证码:
移动技术网