Commons DbUtils是Apache组织提供的一个对JDBC进行简单封装的开源工具类库,使用它能够简化JDBC应用程序的开发,同时也不会影响程序的性能
DBUtils是java编程中的数据库操作实用工具,小巧简单实用,
1.对于数据表的读操作,他可以把结果转换成List,Array,Set等java集合,便于程序员操作;
2.对于数据表的写操作,也变得很简单(只需写sql语句)
3.可以使用数据源,使用JNDI,数据库连接池等技术来优化性能--重用已经构建好的数据库连接对象,而不像php,asp那样,费时费力的不断重复的构建和析构这样的对象。
QueryRunner(DataSource ds),提供数据源(连接池),DBUtils底层自动维护了连接Connection
update(String sql, Object...params),执行更新数据
query(String sql,ResultSetHandler
ArrayHandler:将结果集中的第一条记录封装到Object[]数组中,数组中的每一个元素即使这条记录中的每一个字段的值
ArrayListHandler:将结果集中的每一条记录封装到Object[]数组中,将这些数组再封装到List集合中
BeanHandler:将结果集中的第一条记录封装到一个指定的javabean中
BeanListHandler:将结果集中每一条记录封装到javabean中,将这些javabean再封装到List集合中
ColumnListHandler:将结果集中指定列的字段值封装到一个List集合中
KeyedHandler:将结果集中的每一条记录封装到Map<String,Object>,再讲这个map集合作为另一个Map的value,另一个Map集合的key是指定的字段的值
MapHandler:将结果集中的第一条记录封装到Map<String,Object>集合中,key就是字段名称,value就是字段的值
MapListHandler:将结果集中的每一条记录封装到Map<String,Object>集合中,key就是字段名称,value就是字段的值,再将这些Map封装到List集合中
ScalarHandler:它是用于单数据,列如:select count(1) from 表操作
closeQuietly(Connetion conn)关闭连接,有异常就会抛出
commitAndCloseQuietly(Connetion conn):提交并关闭连接
rollbackAndCloseQuietly(Connetion conn):回滚并关闭连接

3.1maven依赖
<dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.44</version> </dependency> <dependency> <groupId>com.mchange</groupId> <artifactId>c3p0</artifactId> <version>0.9.5</version> </dependency> <!-- https://mvnrepository.com/artifact/commons-dbutils/commons-dbutils --> <dependency> <groupId>commons-dbutils</groupId> <artifactId>commons-dbutils</artifactId> <version>1.7</version> </dependency>
3.2QueryDbUtils代码
package com.rookie.bigdata.dbutils; import com.rookie.bigdata.domain.User; import com.rookie.bigdata.util.C3P0Utils; import org.apache.commons.dbutils.QueryRunner; import org.apache.commons.dbutils.handlers.BeanHandler; import org.apache.commons.dbutils.handlers.BeanListHandler; import org.apache.commons.dbutils.handlers.ScalarHandler; import java.sql.SQLException; import java.util.List; /** * Created by dell on 2019/5/24. */ public class QueryDbUtils { public static void main(String[] args) { //insertMethod(); //updateMethod(); //deleteMethod(); //selectAllUserMethod(); //selectUserMethod(); try { QueryRunner qr = new QueryRunner(C3P0Utils.getDataSource()); String sql = "select count(*) from user "; Long count=(Long)qr.query(sql, new ScalarHandler()); System.out.println(count); } catch (Exception e) { e.printStackTrace(); } } //查询单个用户方法 private static void selectUserMethod() { try { QueryRunner qr = new QueryRunner(C3P0Utils.getDataSource()); String sql = "select * from user where username=?"; Object[] params = {"李四"}; User user = qr.query(sql, new BeanHandler<User>(User.class), params); System.out.println(user); } catch (Exception e) { e.printStackTrace(); } } //查询所有的用户信息 private static void selectAllUserMethod() { try { QueryRunner qr = new QueryRunner(C3P0Utils.getDataSource()); String sql = "select * from user"; List<User> userList = qr.query(sql, new BeanListHandler<User>(User.class)); for (User user : userList) { System.out.println(user); } } catch (Exception e) { e.printStackTrace(); } } //删除操作 private static void deleteMethod() { try { QueryRunner qr = new QueryRunner(C3P0Utils.getDataSource()); String sql = "delete from user where username=?"; Object[] params = {"李四"}; int update = qr.update(sql, params); System.out.println("删除了" + update + "记录"); } catch (Exception e) { e.printStackTrace(); } } //更新记录操作 private static void updateMethod() { try { QueryRunner qr = new QueryRunner(C3P0Utils.getDataSource()); String sql = "update user set password=? where username=?"; Object[] params = {"654321", "李四"}; int update = qr.update(sql, params); System.out.println("更新了" + update + "记录"); } catch (Exception e) { e.printStackTrace(); } } /** * 查询操作 */ private static void insertMethod() { try { // 1.创建核心类QueryRunner QueryRunner qr = new QueryRunner(C3P0Utils.getDataSource()); // 2.编写SQL语句 String sql = "insert into user values(?,?)"; // 3.为站位符设置值 Object[] params = {"李四", "123456"}; // 4.执行添加操作 int rows = qr.update(sql, params); System.out.println("添加成功!" + rows); } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }
C3P0Utils.java
package com.rookie.bigdata.util; import com.mchange.v2.c3p0.ComboPooledDataSource; import javax.sql.DataSource; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; /** * Created by dell on 2019/5/23. */ public class C3P0Utils { private static ComboPooledDataSource dataSource = new ComboPooledDataSource("mysql"); public static DataSource getDataSource() { return dataSource; } public static Connection getConnection() { try { return dataSource.getConnection(); } catch (SQLException e) { throw new RuntimeException(e); } } //释放连接回连接池 public static void close(Connection conn, PreparedStatement pst, ResultSet rs) { if (rs != null) { try { rs.close(); } catch (SQLException e) { e.printStackTrace(); } } if (pst != null) { try { pst.close(); } catch (SQLException e) { e.printStackTrace(); } } if (conn != null) { try { conn.close(); } catch (SQLException e) { e.printStackTrace(); } } } }
User.java
package com.rookie.bigdata.domain; /** * Created by dell on 2019/5/25. */ public class User { private String username; private String password; 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; } @Override public String toString() { return "User{" + "username='" + username + '\'' + ", password='" + password + '\'' + '}'; } }