JDBC( 十)减轻JDBC,dbutils使用
来源:互联网 发布:修改表名的sql语句 编辑:程序博客网 时间:2024/06/05 02:37
关于dbutils
关于dbutils,百度是这样说的:
DBUtils是java编程中的数据库操作实用工具,小巧简单实用
- 对于数据表的读操作,他可以把结果转换成List,Array,Set等java集合,便于程序员操作;
- 对于数据表的写操作,也变得很简单(只需写sql语句)
- 可以使用数据源,使用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; }}
- JDBC( 十)减轻JDBC,dbutils使用
- JDBC(十)使用 DBUtils
- J2EE进阶之JDBC工具类DbUtils使用 二十
- jdbc-使用DBUtils进行crud
- JDBC : 使用DBUtils 工具类
- JDBC:Apache DBUtils的使用
- jdbc优化-DButils的使用
- JDBC连接数据库之DBUtils简单使用(6)
- JDBC相关(三):DButils工具类的使用详解
- (三)JDBC连接池&DBUtils—C3P0的使用
- Java Web(十) JDBC的增删改查,C3P0等连接池,dbutils框架的使用
- Java Web(十) JDBC的增删改查,C3P0等连接池,dbutils框架的使用
- Java Web(十) JDBC的增删改查,C3P0等连接池,dbutils框架的使用
- 使用commons-dbutils进行JDBC项目开发
- 使用commons-dbutils进行JDBC项目开发
- 使用commons-dbutils简化JDBC操作(一)
- DbUtils component学习使用(jdbc封装工具)
- jdbc中dbutils的类别使用
- css实现计数器
- 什么是物理路径,相对路径,绝对路径以及根目录
- 彻底弄懂CommonJS和AMD/CMD!
- R-FCN
- linux下ctrl 常用组合键
- JDBC( 十)减轻JDBC,dbutils使用
- Java Concurrency in Practice :基础知识(正确的同步 - 组合)
- 位运算初步
- E - 求奇数的乘积
- 1613-3-傅溥衍 总结《2016年11月24日》【连续第五十五天总结】
- Karabiner常用的自带快捷键
- 浏览器返回刷新页面
- 玩转Spring!从拒绝Filter开始
- github 版本回退