JdbcUtils 系列1

好久不见. 提交于 2020-02-14 14:05:23

1、开发前准备

创建java pro为dbutils_1,没有lib目录,建一个即可

/dbutils_1/lib/mysql-connector-java-5.0.8-bin.jar

数据库搭建c3p0

/dbutils_1/src/c3p0-config.xml

/dbutils_1/lib/c3p0-0.9.2-pre1.jar

/dbutils_1/lib/mchange-commons-0.2.jar

2、包commons-dbutils-1.2.jar

3、工具类JdbcUtils.java

package cn.itcast.utils;

import java.sql.Connection;
import java.sql.SQLException;

import javax.sql.DataSource;


import com.mchange.v2.c3p0.ComboPooledDataSource;

public class JdbcUtils {
    private static ComboPooledDataSource ds = null;

    // 创建c3p0连接池,真个应用只需要初始化一次,放在静态代码块里面
    static {
        ds = new ComboPooledDataSource("flx");
    }

    // 取得连接
    public static Connection getConnection() throws SQLException {
        return ds.getConnection();
    }

    // 获取连接池
    public static DataSource getDataSource(){
        return ds;
    }
}

 

4、数据库操作

增、删、改、查、批处理、大数据

package cn.itcast.demo;

import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.sql.SQLException;
import java.util.Date;
import java.util.List;

import javax.sql.rowset.serial.SerialClob;

import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.handlers.BeanHandler;
import org.apache.commons.dbutils.handlers.BeanListHandler;
import org.junit.Test;

import cn.itcast.domain.User;
import cn.itcast.utils.JdbcUtils;

public class Demo1 {

    /*
     * 
     * 使用dbutils框架完成curd,以及批处理
     * 
     create database day17; use day17;
    
     create table user(        id int primary key auto_increment,       name varchar(40),
       password varchar(40),       email varchar(60),       birthday date );
      
     insert into user(name,password,email,birthday)values('zs','123456','zs@sina.com','1980-09-09'); 
     insert into user(name,password,email,birthday) values('lisi','123456','lisi@sina.com','1980-09-09'); 
     insert into user(name,password,email,birthday) values('wangwu','123456','wangwu@sina.com','1980-09-09');
     * 
     */

    @Test
    public void add() throws SQLException {

        QueryRunner qr = new QueryRunner(JdbcUtils.getDataSource());
        String sql = "insert into user(name,password,email,birthday) values(?,?,?,?)";
        Object params[] = { "ccc", "123", "cc@sina.com", new Date() };
        qr.update(sql, params);
    }

    @Test
    public void delete() throws SQLException {

        QueryRunner qr = new QueryRunner(JdbcUtils.getDataSource());
        String sql = "delete from user where id=?";
        qr.update(sql, 1);

    }

    @Test
    public void update() throws SQLException {
        QueryRunner qr = new QueryRunner(JdbcUtils.getDataSource());
        String sql = "update user set name=? where id=?";
        Object params[] = { "ddd", 5 };
        qr.update(sql, params);
    }

    @Test
    public void find() throws SQLException {
        QueryRunner qr = new QueryRunner(JdbcUtils.getDataSource());
        String sql = "select * from user where id=?";
        Object params[] = { 2 };
        User user = (User) qr.query(sql, params, new BeanHandler(User.class));
        System.out.println(user.getBirthday());
    }

    @Test
    public void getAll() throws SQLException {
        QueryRunner qr = new QueryRunner(JdbcUtils.getDataSource());
        String sql = "select * from user";
        List list = (List) qr.query(sql, new BeanListHandler(User.class));
        System.out.println(list.size());
    }

    //批处理插入多条数据
    @Test
    public void testBatch() throws SQLException {
        QueryRunner qr = new QueryRunner(JdbcUtils.getDataSource());
        String sql = "insert into user(name,password,email,birthday) values(?,?,?,?)";
        Object params[][] = new Object[10][];
        for (int i = 0; i < 10; i++) {
            params[i] = new Object[] { "aa" + i, "123", "aa@sina.com",
                    new Date() };
        }
        qr.batch(sql, params);
    }

    // 用dbutils完成大数据(不建议用)
    /***************************************************************************
     create table testclob
     (
         id int primary key auto_increment,
         resume text
     );
     * @throws SQLException 
     * @throws IOException 
     **************************************************************************/
    
    @Test
    public void testclob() throws SQLException, IOException{
        QueryRunner runner = new QueryRunner(JdbcUtils.getDataSource());
        String sql = "insert into testclob(resume) values(?)";  //clob
        
        
        //替换参数
        /*String path = Demo1.class.getClassLoader().getResource("1.txt").getPath();
        Object params[] = {new FileReader(path)};
        */
        
        String path = Demo1.class.getClassLoader().getResource("1.txt").getPath();
        FileReader in = new FileReader(path);
        char[] buffer = new char[(int) new File(path).length()];
        in.read(buffer);
        SerialClob clob = new SerialClob(buffer);
        Object params[] = {clob};
        runner.update(sql, params);
    }
    
}

 5、源码下载

http://files.cnblogs.com/lxsky/dbutils_1.zip

6、DBUtils对结果集自动封装可以使用下面的,详细可参考http://www.cnblogs.com/yezhenhan/archive/2011/01/11/1932556.html

ArrayHandler:把结果集中的第一行数据转成对象数组。
ArrayListHandler:把结果集中的每一行数据都转成一个对象数组,再存放到List中。
BeanHandler:将结果集中的第一行数据封装到一个对应的JavaBean实例中。
BeanListHandler:将结果集中的每一行数据都封装到一个对应的JavaBean实例中,存放到List里。
ColumnListHandler:将结果集中某一列的数据存放到List中。
KeyedHandler:将结果集中的每一行数据都封装到一个Map里,然后再根据指定的key把每个Map再存放到一个Map里。
MapHandler:将结果集中的第一行数据封装到一个Map里,key是列名,value就是对应的值。
MapListHandler:将结果集中的每一行数据都封装到一个Map里,然后再存放到List。
ScalarHandler:将结果集中某一条记录的其中某一列的数据存成Object。

  

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!