dbUtils工具
来源:互联网 发布:apache编译安装参数 编辑:程序博客网 时间:2024/06/16 07:50
dbUtils工具
问题:dbutils是什么,有什么作用?
它就是一个简单的jdbc封装工具.使用dbutils可以简化操作.要使用dbutils需要导入jar包.
dbutils核心
1.QueryRunner类 它是用于执行sql语句的类。 1.query 用于执行select 2.update 用于执行update delete insert 3.batch 批处理2.ResultSetHandler接口 用于定义结果集的封装 它提供九个实现类,可以进行不同的封装。3.DbUtils类 它提供关于关闭资源以及事务rollback,commit操作。-----------------------------------------------------
Dbutlis详解
1.QueryRunner 怎样获取? 1.new QueryRunner() 如果是使用这种构造创建的QueryRunner,它的事务是手动控制. 2.new QueryRunner(DataSource ds); 如果是使用这种构造,它的事务是自动事务,简单说,一条sql一个事务。2.QueryRunner中的三个核心方法 query update batch 对于上述三个方法,它们提供很多重载。 如果QueryRunner在创建时,没有传递DataSource参数,那么在使用 query,update,batch方法时,要传递Connection参数 如果QueryRunner在创建时,传递了Dataource参数,好么在使用 query,update,batch方法时,不需要传递Connection参数。 总结: 怎样配套使用: QueryRunner runner=new QueryRunner(); runner.query(Connection,sql,ResultSetHandler,Object... param); runner.update(Connection,sql,Object...param); runner.batch(Connection con,sql,Object[][] objs); QueryRunner runner=new QueryRunner(DataSource ds); runner.query(sql,ResultSetHandler,Object... param); runner.update(sql,Object...param); runner.batch(sql,Object[][] objs);
自定义dbUtils
核心类如下
MyQueryRunner.javaMyBeanHander.javaMyResultSetHandler.java
重点函数解析
@Overridepublic Object handler(ResultSet rs) { Object obj = null; try { BeanInfo bif = Introspector.getBeanInfo(clazz); PropertyDescriptor[] pds = bif.getPropertyDescriptors(); while (rs.next()) { obj = clazz.newInstance(); for (PropertyDescriptor pd : pds) { String name = pd.getName(); // 获取属性名 Method m = pd.getWriteMethod(); if (m != null) { m.invoke(obj, rs.getObject(name)); } } System.out.println(obj.toString()); } } catch (Exception e) { e.printStackTrace(); } return obj;}1. BeanInfo bif = Introspector.getBeanInfo(clazz) 获取指定字节码中Bean 信息2. PropertyDescriptor[] pds = bif.getPropertyDescriptors(); 获取自定字节码文件中的PropertyDescriptor数据(属性描述器) PropertyDescriptor 中的常用方法介绍: Method getReadMethod() 获得应该用于读取属性值的方法。 Method getWriteMethod() 获得应该用于写入属性值的方法。 、 Method 中常用方法介绍: TypeVariable<Method>[] getTypeParameters() 返回 TypeVariable 对象的数组,这些对象描述了由 GenericDeclaration 对象表示的一般声明按声明顺序来声明的类型变量。 Object invoke(Object obj, Object... args) 对带有指定参数的指定对象调用由此 Method 对象表示的底层方法。
源码如下:
MyQueryRunner
package com.uu.dbUtils;import java.sql.Connection;import java.sql.PreparedStatement;import java.sql.ResultSet;import java.sql.ResultSetMetaData;import java.sql.SQLException;import java.sql.Statement;import com.mchange.v2.c3p0.ComboPooledDataSource;/** * 模仿DbUtils中的 QueryRunner * * 实现对JdbcUtils 的封装 * * * @author penghao * */public class MyQueryRunner { private ComboPooledDataSource cpds; public MyQueryRunner() { } public MyQueryRunner(ComboPooledDataSource cpds) { this.cpds = cpds; } /** * * 更新数据 ,即 插入数据 * * @param conn * @param sql * @param param * @return * @throws SQLException */ public boolean update(Connection conn, String sql, Object... param) throws SQLException { PreparedStatement ps = conn.prepareStatement(sql); for (int i = 0; i < param.length; i++) { ps.setObject(i + 1, param[i]); } return ps.execute(); } public <T> T query(Connection conn, String sql, MyResultSetHandler<T> msh) throws SQLException { Statement st = conn.createStatement(); ResultSet rs = st.executeQuery(sql); return msh.handler(rs); } public boolean update(String sql, Object... param) throws SQLException { if (cpds == null) { throw new RuntimeException("csp0为空,请在构造方法中传入参数"); } Connection conn = cpds.getConnection(); PreparedStatement ps = conn.prepareStatement(sql); for (int i = 0; i < param.length; i++) { ps.setObject(i + 1, param[i]); } return ps.execute(); }}
MyResultSetHandler.java
package com.uu.dbUtils;import java.sql.ResultSet;public interface MyResultSetHandler<T> { /** * 反射 回应值, ResultSet 中取得列的 类型 赋值返回 * * @param rs * @return * @return */ public T handler(ResultSet rs);}
MyBeanHander.java
package com.uu.dbUtils;import java.sql.Connection;import java.sql.PreparedStatement;import java.sql.ResultSet;import java.sql.ResultSetMetaData;import java.sql.SQLException;import java.sql.Statement;import com.mchange.v2.c3p0.ComboPooledDataSource;/** * 模仿DbUtils中的 QueryRunner * * 实现对JdbcUtils 的封装 * * * @author penghao * */public class MyQueryRunner { private ComboPooledDataSource cpds; public MyQueryRunner() { } public MyQueryRunner(ComboPooledDataSource cpds) { this.cpds = cpds; } /** * * 更新数据 ,即 插入数据 * * @param conn * @param sql * @param param * @return * @throws SQLException */ public boolean update(Connection conn, String sql, Object... param) throws SQLException { PreparedStatement ps = conn.prepareStatement(sql); for (int i = 0; i < param.length; i++) { ps.setObject(i + 1, param[i]); } return ps.execute(); } public <T> T query(Connection conn, String sql, MyResultSetHandler<T> msh) throws SQLException { Statement st = conn.createStatement(); ResultSet rs = st.executeQuery(sql); return msh.handler(rs); } public boolean update(String sql, Object... param) throws SQLException { if (cpds == null) { throw new RuntimeException("csp0为空,请在构造方法中传入参数"); } Connection conn = cpds.getConnection(); PreparedStatement ps = conn.prepareStatement(sql); for (int i = 0; i < param.length; i++) { ps.setObject(i + 1, param[i]); } return ps.execute(); }}
0 0
- dbutils工具
- dbUtils工具
- 测试 DBUtils 工具类
- Apache-DBUtils工具简介
- DbUtils工具的使用
- dbUtils工具的使用
- 数据库连接池工具---DbUtils
- JDBC-DBUtils工具类
- DBUtils工具类
- DBUtils工具的使用
- Dbutils工具基本使用
- JDBC之DbUtils工具
- JDBC工具-DBUtils
- DBUtils数据库工具类
- commons-dbutils 工具使用
- dbutils工具类:QueryRunner
- JDBC : 使用DBUtils 工具类
- 【Android】原生DBUtils工具类
- Java大用处——Integer类常用的方法举例
- JQuery学习笔记
- aaa
- synchronized同步语句块
- 读《程序是怎样跑起来的》
- dbUtils工具
- Build Post Office II
- DevExpress.XtraGrid自定义列显示文本
- 数据库操作常用命令管理(Mysql)
- quartus prime工程中各种文件的后缀及意义
- 数据库的课堂整理
- bzoj3351 [ IOI2009 ] -- 阈值
- VS2013配置OpenGL4.3及以上编程环境
- Codeforces Round #402 (Div. 2) D. String Game