DBUtils框架及其使用

来源:互联网 发布:js单引号的转义字符串 编辑:程序博客网 时间:2024/06/14 14:02

commons-dbutils 是 Apache提供的一个开源 JDBC工具类库,它是对JDBC的简单封装,能极大简化jdbc编码的工作量

API

QueryRunner//简化SQL查询ResultSetHandler//将数据按要求转换为另一种形式DbUtils//工具类,关闭连接、装载JDBC驱动程序
//methodpublic Object query(Connection conn, String sql, Object[] params, ResultSetHandler rsh) //查询,对象数组中的每个元素值被用来作为查询语句的置换参数(占位符)。自行处理PreparedStatement 和 ResultSet 的创建和关闭public Object query(String sql, Object[] params, ResultSetHandler rsh) //从提供给构造方法的数据源或使用的setDataSource 方法中重新获得 Connection。public Object query(Connection conn, String sql, ResultSetHandler rsh) //执行一个不需要置换参数的查询操作。public int update(Connection conn, String sql, Object[] params) //用来执行一个更新(插入、更新或删除)操作。public int update(Connection conn, String sql)//用来执行一个不需要置换参数的更新操作。

ResultSetHandler 接口的实现类

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

创建一个DBUtils

public class MyDBCPUtils{    //数据源 运行程序的时候直接加载    private static DataSource ds;    public static DataSource getDs()    {        return ds;    }    static    {        try        {            //加载配置文件            InputStream in = MyDBCPUtils.class.getClassLoader().getResourceAsStream("dbcpconfig.properties");            Properties prop = new Properties();            prop.load(in);            // 框架提供的数据源            BasicDataSourceFactory factory = new BasicDataSourceFactory();            ds = factory.createDataSource(prop);        }        catch (IOException e)        {            e.printStackTrace();        }        catch (Exception e)        {                       e.printStackTrace();        }    }    //创建连接    public static Connection getConnection() throws SQLException    {        return ds.getConnection(); // 返回一个被包装过的connection,所以用户可以直接关掉。关掉其实就是放回连接池了。    }    //释放资源    public static void releaseResource(Statement st, ResultSet rs,            Connection conn)    {        if (st != null)        {            try            {                st.close();            }            catch (SQLException e)            {                e.printStackTrace();            }        }        if (rs != null)        {            try            {                rs.close();            }            catch (SQLException e)            {                e.printStackTrace();            }        }        if (conn != null)        {            try            {                conn.close();            }            catch (SQLException e)            {                e.printStackTrace();            }        }    }}

加载配置文件dbcpconfig.prop

#连接设置driverClassName=com.mysql.jdbc.Driverurl=jdbc:mysql://localhost:3306/mytestusername=rootpassword=123456#<!-- 初始化连接 -->initialSize=10#最大连接数量maxActive=50#<!-- 最大空闲连接 -->maxIdle=20#<!-- 最小空闲连接 -->minIdle=5#<!-- 超时等待时间以毫秒为单位 6000毫秒/1000等于60秒 -->maxWait=60000#JDBC驱动建立连接时附带的连接属性属性的格式必须为这样:[属性名=property;] #注意:"user" 与 "password" 两个属性会被明确地传递,因此这里不需要包含他们。connectionProperties=useUnicode=true;characterEncoding=utf8#指定由连接池所创建的连接的自动提交(auto-commit)状态。defaultAutoCommit=true#driver default 指定由连接池所创建的连接的只读(read-only)状态。#如果没有设置该值,则“setReadOnly”方法将不被调用。(某些驱动并不支持只读模式,如:Informix)defaultReadOnly=#driver default 指定由连接池所创建的连接的事务级别(TransactionIsolation)。#可用值为下列之一:(详情可见javadoc。)NONE,READ_UNCOMMITTED, READ_COMMITTED, REPEATABLE_READ, SERIALIZABLEdefaultTransactionIsolation=REPEATABLE_READ

新建一个JavaBean存放每一条记录

public class User {  private String username;   private String password;   private String email;   private String headimg;    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;    }    public String getEmail() {        return email;    }    public void setEmail(String email) {        this.email = email;    }     public User() {        super();        // TODO Auto-generated constructor stub    }    public String getHeadimg() {        return headimg;    }    public void setHeadimg(String headimg) {        this.headimg = headimg;    }    public User(String username, String password, String email, String headimg) {        super();        this.username = username;        this.password = password;        this.email = email;        this.headimg = headimg;    }    @Override    public String toString() {        return "User [username=" + username + ", password=" + password                + ", email=" + email + ", headimg=" + headimg + "]";    }}

QueryRunner和ResultHandler怎么用?

//2步QueryRunner queryRunner = new QueryRunner(MyDBCPUtils.getDs());//传入数据源,构造QueryRunner类List<User> userlist = queryRunner.query("select * from user;", new BeanListHandler<User>(User.class)  );List<User> userlist = queryRunner.query("select * from user where username = ?;",   new BeanListHandler<User>(User.class) , "aa");int update = queryRunner.update("insert into user values(?,?,?,?)","gg","gg","gg@163.com","me.jpg");
//1.传入数据源创建QueryRunner runner = new QueryRunner(MyDBCPUtils.getDs());/ArrayHandler把结果集中的第一行的所有列的数据转成对象数组。不止一行的情况只取第一行Object[] array = runner.query("select * from user;", new ArrayHandler());////ArrayListHandler:把结果集中的每一行数据都转成一个数组,再存放到List中List<Object[]> list = runner.query("select * from user;", new ArrayListHandler());///BeanHandler将结果集中的第一行数据封装到一个对应的JavaBean实例中,它的成员跟表里的列名一致User user = runner.query("select * from user where username = ?;", new BeanHandler<User>(User.class),"kk");//BeanListHandler将结果集中的每一行数据都封装到一个对应的JavaBean实例中,存放到List里List<User> list = runner.query("select * from user;", new BeanListHandler<User>(User.class));//ColumnListHandler:将结果集中某一列的数据存放到List中。List<Object> query = runner.query("select * from user;", new ColumnListHandler(1));// KeyedHandler(name)将结果集中的每一行数据都封装到一个Map<列名,列值>里,再把这些map再存到一个map里,其key为指定的key Map<Object, Map<String, Object>> queryMap = runner.query("select * from user;",  new KeyedHandler("username"));//MapHandler将结果集中的第一行数据封装到一个Map里,key是列名,value是对应的数据Map<String, Object> query = runner.query("select * from user;", new MapHandler()); //MapListHandler将表中的每一行数据都封装到一个Map里,然后再存放到List List<Map<String, Object>> query = runner.query("select * from user;", new MapListHandler());//ScalarHandler只取某一行一列(一个单元格的数据)Object query = runner.query("select count(*) from user;", new ScalarHandler(1));
0 0
原创粉丝点击