说明:
对JDBC进行封装的框架,简化数据库操作。
依赖jar包:commons-dbutils-x.x.jar
一、方法说明:
1.DbUtils类的方法(都是静态的):
DbUtils.close(conn,st,rs):关闭Connection、Statement和ResultSet。 DbUtils.closeQuietly(conn,st,rs):关闭Connection、Statement和ResultSet,隐藏异常。 DbUtils.commitAndCloseQuietly(conn): 用来提交连接,然后关闭连接,并且在关闭连接时不抛出SQL异常。 DbUtils.loadDriver():装载并注册JDBC驱动程序,如果成功就返回true,不需要捕捉ClassNotFoundException异常。2.QueryRunner类的主要方法:
runner.query(conn,sql,params,ResultSetHandler):查询操作,将结果集保存到指定JavaBean对象中 runner.query(sql,params,ResultSetHandler):查询操作,将结果集保存到指定JavaBean对象中 runner.query(conn,sql,ResultSetHandler): 查询操作,不用参数,将结果集保存到指定JavaBean对象中。 runner.update(conn,sql,params):用来执行一个更新(插入、更新或删除)操作。 runner.update(conn,sql):用来执行一个不需要置换参数的更新操作。3.ResultSetHandler 接口的实现类:
BeanHandler:将结果集中的第一行数据封装到一个对应的JavaBean实例中。 BeanListHandler:将结果集中的每一行数据都封装到一个对应的JavaBean实例中,存放到List里。 ArrayHandler:把结果集中的第一行数据转成对象数组。 ArrayListHandler:把结果集中的每一行数据都转成一个数组,再存放到List中。 MapHandler:将结果集中的第一行数据封装到一个Map里,key是列名,value就是对应的值。 MapListHandler:将结果集中的每一行数据都封装到一个Map里,再将Map存放到List中。 ColumnListHandler:将结果集中某一列的数据存放到List中。 KeyedHandler(name):将结果集中的每一行数据都封装到一个小Map里,再把这些小map再存到一个另一大map里,其map的key为传进来的key,如name。二、增删改查:
通用关闭方法:
/** * 关闭数据库连接 */ public void close(Connection conn) { try { if (conn != null) { DbUtils.close(conn); } } catch (SQLException e) { e.printStackTrace(); } }1.插入数据:
/** * 1插入数据 * * @param conn Connection连接对象 */ public void insert(Connection conn) { try { // 1.创建sql语句,id为int类型、name为String类型 String sql = "insert into user(id,name) values(?,?)"; // 2.创建QueryRunner //QueryRunner qr = new QueryRunner(DataSource类); //供JDBC连接池使用的方法 QueryRunner qr = new QueryRunner(); // 不传参,在update方法中传入Connection // 3.创建占位符的参数数组 Object[] params = { 1, "杨先生" }; // 4.执行插入语句 qr.update(conn, sql, params);// 增删改都使用update } catch (SQLException e) { e.printStackTrace(); } finally { close(conn); } }2.更新数据:
/** * 2更新数据 * * @param conn Connection连接对象 */ public void update(Connection conn) { try { // 1.创建sql语句,name为String类型 String sql = "update user set name=? where name=?"; // 2.创建QueryRunner //QueryRunner qr = new QueryRunner(DataSource类); //供JDBC连接池使用的方法 QueryRunner qr = new QueryRunner(); // 不传参,在update方法中传入Connection // 3.创建占位符的参数数组 Object[] params = { "刘先生", "杨先生" }; // 4.执行更新语句 qr.update(conn, sql, params);// 增删改都使用update } catch (SQLException e) { e.printStackTrace(); } finally { close(conn); } }3.查询数据:
(1)创建JavaBean类:
/** * 用户信息实体类 */ public class User { //id public long id; //姓名 public String name; public String getName() { return name; } public void setName(String name) { this.name = name; } }(2)查询:
/** * 3查询数据 * * @param conn Connection连接对象 */ public void query(Connection conn) { try { // 1.创建sql语句 String sql = "select * from user where name=?"; // 2.创建QueryRunner //QueryRunner qr = new QueryRunner(DataSource类); //供JDBC连接池使用的方法 QueryRunner qr = new QueryRunner(); // 不传参,在update方法中传入Connection // 3.创建占位符的参数数组 Object[] params = { "刘先生" }; // 4.执行查询语句 User user = qr.query(conn, sql, new BeanHandler<User>(User.class), params); // 查询单个数据 //List<User> list = qr.query(conn, sql, new BeanListHandler<User>(User.class), params); // 查询列表数据 } catch (SQLException e) { e.printStackTrace(); } finally { close(conn); } }4.删除数据:
/** * 4删除数据 * * @param conn Connection连接对象 */ public void delete(Connection conn) { try { // 1.创建sql语句,name为String类型 DELETE FROM 表名称 WHERE 列名称 = 值 String sql = "delete from user where name=?"; // 2.创建QueryRunner //QueryRunner qr = new QueryRunner(DataSource类); //供JDBC连接池使用的方法 QueryRunner qr = new QueryRunner(); // 不传参,在update方法中传入Connection // 3.创建占位符的参数数组 Object[] params = { "刘先生" }; // 4.执行删除语句 qr.update(conn, sql, params);// 增删改都使用update } catch (SQLException e) { e.printStackTrace(); } finally { close(conn); } }