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
- DBUtils框架及其使用
- DBUtils框架的使用
- 传智播客---DBUtils框架的使用
- dbutils框架的使用(一)
- Android Xutils框架使用之DBUtils
- 开源框架:DBUtils使用详解
- DBUtils 框架的中batch批处理使用
- Xutils框架中关于DbUtils的使用
- 开源框架:DBUtils使用详解
- 开源框架:DBUtils使用详解
- 开源框架:DBUtils使用详解
- dbutils框架
- DBUtils 框架
- DBUtils框架
- DbUtils使用
- DBUtils使用
- DBUtils使用
- DBUtils使用
- Android基础之知识体系
- 2
- TREC Real-Time Summarization Track
- 不是每个人都可以是程序员
- 一句话代码
- DBUtils框架及其使用
- Centos7网络配置
- Matlab Gui 图片二分类。
- leecode_11. Container With Most Water
- MySQL三-----数据库和表的基本操作
- C# 中调用方法
- JavaScript 学习指南
- IOS入门之StoryBoard
- 最短路Floyd算法