JDBC( 十)减轻JDBC,dbutils使用

来源:互联网 发布:修改表名的sql语句 编辑:程序博客网 时间:2024/06/05 02:37

关于dbutils

关于dbutils,百度是这样说的:
DBUtils是java编程中的数据库操作实用工具,小巧简单实用

  1. 对于数据表的读操作,他可以把结果转换成List,Array,Set等java集合,便于程序员操作;
  2. 对于数据表的写操作,也变得很简单(只需写sql语句)
  3. 可以使用数据源,使用JNDI,数据库连接池等技术来优化性能–重用已经构建好的数据库连接对象,而不像php,asp那样,费时费力的不断重复的构建和析构这样的对象。

主要的API
org.apache.commoms.dbutils.QueryRunner
org.apache.commons.dbutils.ResultSethandler
org.apache.commons.dbutils.Dbutils

QueryRunner

QueryRunner简化了SQL查询,与ResultSetHandler组合起来使用,可以减少大量的CRUD操作的编码。

主要使用java.sql.DataSource作为参数,构造Queryrunner类

主要方法:
  public Object query(Connection conn, String sql, Object[] params, ResultSetHandler rsh) throws SQLException:执行一个查询操作,在这个查询中,对象数组中的每个元素值被用来作为查询语句的占位符。该方法会自行处理 PreparedStatement 和 ResultSet 的创建和关闭。
   public Object query(String sql, Object[] params, ResultSetHandler rsh) throws SQLException: 几乎与第一种方法一样;唯一的不同在于它不将数据库连接提供给方法,并且它是从提供给构造方法的数据源(DataSource) 或使用的setDataSource 方法中重新获得 Connection。
   public Object query(Connection conn, String sql, ResultSetHandler rsh) throws SQLException : 执行一个不需要填充占位符的查询。
    public int update(Connection conn, String sql, Object[] params) throws SQLException:用来执行一个更新(插入、修改或删除)操作。
   public int update(Connection conn, String sql) throws SQLException:用来执行一个不需要填充占位符的更新操作。

ResultSetHandler

这个接口处理查询结果ResultSet,将查询到的resultSet结果集转换为另外一个一种形式。

主要实现类:
ArrayHandler:把结果集中的第一行数据转成对象数组。
ArrayListHandler:把结果集中的每一行数据都转成一个数组,再存放到List中。
BeanHandler:将结果集中的第一行数据封装到一个对应的JavaBean实例中。
BeanListHandler:将结果集中的每一行数据都封装到一个对应的JavaBean实例中,存放到List里。
ColumnListHandler:将结果集中某一列的数据存放到List中。
KeyedHandler(name):将结果集中的每一行数据都封装到一个Map里,再把这些map再存到一个map里,其key为指定的key。
MapHandler:将结果集中的第一行数据封装到一个Map里,key是列名,value就是对应的值。
MapListHandler:将结果集中的每一行数据都封装到一个Map里,然后再存放到List

Dbutils

使用dbutils

首先就是引入jar包,剩下的就是编码了。
数据库设计:
这里写图片描述

testQueryRunnerCRUD

package com.tuxianchao;import java.sql.Date;import java.sql.SQLException;import java.util.Iterator;import java.util.List;import org.apache.commons.dbutils.QueryRunner;import org.apache.commons.dbutils.handlers.BeanHandler;import org.apache.commons.dbutils.handlers.BeanListHandler;import org.junit.Test;public class QueryRunnerCRUDTest {    private static QueryRunner queryRunner = new QueryRunner(JdbcUtils.getDataSource());    @Test    public void testAdd() throws SQLException {        String sql = "INSERT INTO user (name,password,birth) VALUES (?,?,?)";        Object[] param = { "aa", "aa123", new Date(new java.util.Date().getTime()) };        queryRunner.update(sql, param);    }    @Test    public void testDelete() throws SQLException {        String sql = "DELETE FROM user WHERE id = ?";        queryRunner.update(sql, 1);    }    @Test    public void testUpdate() throws SQLException {        String sql = "UPDATE user SET name = 'bb' WHERE id = ?";        queryRunner.update(sql, 2);    }    @Test    public void testGet() throws SQLException {        String sql = "SELECT * FROM user WHERE id = ?";        Object[] param = { 3 };        User user = queryRunner.query(sql, param, new BeanHandler<>(User.class));        System.out.println(user);    }    @Test    public void testGetAll() throws SQLException {        String sql = "SELECT * FROM user";        List<User> users = queryRunner.query(sql, new BeanListHandler<>(User.class));        Iterator<User> iterator = users.iterator();        while (iterator.hasNext()) {            System.out.println(iterator.next());        }    }    @Test    public void testBatch() throws SQLException {        String sql = "INSERT INTO user (name,password,birth) VALUES (?,?,?)";        Object[][] params = new Object[10][];        for (int i = 0; i < 10; i++) {            params[i] = new Object[] { "aa" + i, "password" + i , new Date(new java.util.Date().getTime()) };        }        queryRunner.batch(sql, params);    }}

TestResultSetHandler

package com.tuxianchao;import java.sql.SQLException;import java.util.Arrays;import java.util.Iterator;import java.util.List;import java.util.Map;import java.util.Map.Entry;import org.apache.commons.dbutils.QueryRunner;import org.apache.commons.dbutils.handlers.ArrayHandler;import org.apache.commons.dbutils.handlers.ArrayListHandler;import org.apache.commons.dbutils.handlers.BeanHandler;import org.apache.commons.dbutils.handlers.BeanListHandler;import org.apache.commons.dbutils.handlers.ColumnListHandler;import org.apache.commons.dbutils.handlers.MapHandler;import org.apache.commons.dbutils.handlers.MapListHandler;import org.junit.Test;public class TestResultSetHandler {    public static QueryRunner queryRunner = new QueryRunner(JdbcUtils.getDataSource());    @Test    public void testArrayHandler() throws SQLException {        String sql = "SELECT * FROM user";        Object[] objects = queryRunner.query(sql, new ArrayHandler());        System.out.println(Arrays.asList(objects));// ArrayHandler将返回的resultSet的第一行转换为对象数组    }    @Test    public void testArrayListhandler() throws SQLException {        String sql = "SELECT * FROM user";        List<Object[]> list = queryRunner.query(sql, new ArrayListHandler());        for (Object[] objects : list) {            System.out.println(Arrays.asList(objects));// ArrayListHandler将返回的resultset的每一行转换为数组,在放到List中        }    }    @Test    public void testColumnListHandler() throws SQLException {        String sql = "SELECT * FROM user";        List list = (List) queryRunner.query(sql, new ColumnListHandler("id"));        System.out.println(list);// 将结果集中某一列的数据存放到List中。    }    @Test    public void testBeanHandler() throws SQLException {        String sql = "SELECT * FROM user ";        User user = queryRunner.query(sql, new BeanHandler<>(User.class));        System.out.println(user);// 将resultset的数据第一行处理为一个javabean的对象    }    @Test    public void testBeanListHandler() throws SQLException {        String sql = "SELECT * FROM user ";        List<User> users = queryRunner.query(sql, new BeanListHandler<>(User.class));        Iterator<User> iterator = users.iterator();        while (iterator.hasNext()) {            System.out.println(iterator.next());// 将resultset的数据每一行处理为一个javabean的对象,存放在一个list中        }    }    @Test    public void testMapHandler() throws SQLException {        String sql = "SELECT * FROM user ";        Map<String, Object> map = queryRunner.query(sql, new MapHandler());        for (Map.Entry<String, Object> m : map.entrySet()) {            System.out.println(m.getKey() + ":" + m.getValue());// 将结果集中的第一行数据封装到一个Map里,key是列名,value就是对应的值。        }    }    @Test    public void testMapListHandler() throws SQLException {        String sql = "SELECT * FROM user ";        List<Map<String, Object>> list = queryRunner.query(sql, new MapListHandler());        Iterator<Map<String, Object>> listIteator = list.iterator();        while (listIteator.hasNext()) {            for (Entry<String, Object> m : listIteator.next().entrySet()) {                System.out.println(m.getKey() + ":" + m.getValue());// 将结果集中的每一行数据都封装到一个Map里,然后再存放到List            }        }    }}

附:
JdbcUtils.java:

package com.tuxianchao;import java.sql.Connection;import java.sql.PreparedStatement;import java.sql.ResultSet;import java.sql.SQLException;import javax.sql.DataSource;import com.mchange.v2.c3p0.ComboPooledDataSource;public class JdbcUtils {    private static DataSource dataSource = null;    static {        // 通过读取C3P0的xml配置文件创建数据源,C3P0的xml配置文件c3p0-config.xml必须放在src目录下        dataSource = new ComboPooledDataSource();    }    public static Connection getConnection() throws SQLException {        return dataSource.getConnection();    }    public void releaseDB(Connection connection, PreparedStatement preparedStatement, ResultSet resultSet) {        if (connection != null) {            try {                connection.close();            } catch (SQLException e) {                // TODO Auto-generated catch block                e.printStackTrace();            }        }        if (preparedStatement != null) {            try {                preparedStatement.close();            } catch (SQLException e) {                // TODO Auto-generated catch block                e.printStackTrace();            }        }        if (resultSet != null) {            try {                resultSet.close();            } catch (SQLException e) {                // TODO Auto-generated catch block                e.printStackTrace();            }        }    }    public static DataSource getDataSource() {        return dataSource;    }}
0 0
原创粉丝点击