// Jdbc 的增,删, 改流程类似,只是参数不同, 因此可以向上抽取public class Demo{// Jdbc 的增加public void addStu(Stu stu){Connection con = null;PreparedStatement pstmt = null;try{con = JdbcUtils.getConnection();String sql = "INSERT INTO t_stu VALUES(?,?,?,?)";pstmt = con.prepareStatement(sql);pstmt.setInt(1,stu.getSid());pstmt.setString(2,stu.getSname());pstmt.setInt(3,stu.getAge());pstmt.setString(4,stu.getGender());pstmt.executeUpdate();} catch(Exception e){// 处理异常} finally{// 关闭资源}}// jdbc 修改方法public void UpdateStu(Stu stu){Connection con = null;PreparedStatement pstmt = null;try{con = JdbcUtils.getConnection();// 只需要 sql 语句修改String sql = "UPDATE t_stu SET sname=?,age=?,gender=? WHERE sid=?";pstmt = con.prepareStatement(sql);pstmt.setInt(4,stu.getSid());pstmt.setString(1,stu.getSname());pstmt.setInt(2,stu.getAge());pstmt.setString(3,stu.getGender());pstmt.executeUpdate();} catch(Exception e){// 处理异常} finally{// 关闭资源}}// jdbc 删除方法public void UpdateStu(int sid){Connection con = null;PreparedStatement pstmt = null;try{con = JdbcUtils.getConnection();// 只需要 sql 语句修改String sql = "DELETE FROM t_stu WHERE sid=?";pstmt = con.prepareStatement(sql);pstmt.setInt(1,stu.getSid());pstmt.executeUpdate();} catch(Exception e){// 处理异常} finally{// 关闭资源}}// jdbc 的查询方法 (查询一个)public Stu load(int sid){Connection con = null;PreparedStatement pstmt = null;ResultSetHandler rs = null;try{con = JdbcUtils.getConnection();// 只需要 sql 语句修改String sql = "SELECT * FROM t_stu WHERE sid=?";pstmt = con.prepareStatement(sql);pstmt.setInt(1,stu.getSid());// 发送 sql 语句需要变化rs = pstmt.executeQuery();if(!rs.next()) return null;// 需要把 rs 转换成 Stu 对象Stu stu = new Stu();stu.setSid(rs.getInt("sid"));stu.setSname(rs.getString("sname"));stu.setAge(rs.getInt("age"));stu.setGender(rs.getString("gender"));return stu;} catch(Exception e){// 处理异常} finally{// 关闭资源}    }}// 升级public class QR<T>{private DataSource dataSource;// 构造函数public QR(DataSource dataSource){super();this.dataSource = dataSource;}// 无参构造函数public QR(){super();}// 可以实现数据库的 insert,update, deletepublic int update(String sql, Object... params){Connection con = null;PreparedStatement pstmt = null;try{con = dataSource.getConnection();pstmt = con.prepareStatement(sql);initParams(pstmt, params); // 设置参数// 返回影响的行数return pstmt.executeUpdate();} catch(Exception e){throw new RuntimeException(e);} finally{// 关闭资源try{if(pstmt != null) pstmt.close();if(con != null) con.close();} catch(SQLException e){throw new RuntimeException(e);}}}// 私有方法, 专门给 sql 语句的参数赋值private void initParams(PreparedStatement pstmt, Object... params)throws SQLException{// 循环遍历赋值for(int i=0; i<params.length; i++){pstmt.setObject(i+1, params[i]);}}// 查询方法public T query(String sql, RsHandler rh, Object... params){Connection con = null;PreparedStatement pstmt = null;ResultSet rs = null;try{con = dataSource.getConnection();pstmt = con.prepareStatement(sql);initParams(pstmt,params);rs = pstmt.executeQuery();return (T)rh.handle(rs);}catch(Exception e){throw new RuntimeException(e);} finally{try{if(pstmt != null) pstmt.close();if(con != null) con.close();} catch(SQLException e){throw new RuntimeException(e);}}}}// 接口, 将 ResultSet 转换成 JavaBean 实体interface RsHandler<T>{public T handle(ResultSet rs) throws SQLException;}// 使用上述 QR 类操作数据库public class Demo2{public void fun(){Stu stu = new Stu(1001,"lisi",22,"male");addStu(stu);}// 添加操作public void addStu(Stu stu){// 创建对象时, 给出连接池QR qr = new QR(JdbcUtils.getDataSource());// 给出 sql 模板String sql = "INSERT INTO t_stu VALUES(?,?,?,?)";// 给出参数Object[] params = {stu.getSid(),stu.getSname(),stu.getAge(),stu.getGender()};// 调用 QR 类的 update 方法qr.update(sql,params);}// 查询操作public Stu load(int sid){QR qr = new QR(JdbcUtils.getDataSource());String sql = "SELECT * FROM WHERE sid=?";Object[] params = {sid};// 实现 RsHandler 接口,// 可以将 ResultSet 结果集转换为 Stu 对象RsHandler<Stu> rh = new RsHandler<Stu>(){// 实现方法public Stu handle(ResultSet rs) throws SQLException {if(!rs.next()) return null;Stu stu = new Stu();stu.setSid(rs.getInt("sid"));stu.setSname(rs.getString("sname"));stu.setAge(rs.getInt("age"));stu.getGender(rs.getString("gender"));return stu;}};qr.query(sql,rh,params);}}

DBUtils 工具类的使用

public class Demo(){// 数据库添加数据public void fun1() throws SQLException{// 给出连接池参数QueryRunner qr = new QueryRunner(JdbcUtils.getDataSource());// 给出 sql 模板String sql = "INSERT INTO t_stu VALUES(?,?,?,?)";// 给出参数的值Object[] params = {1003,"zhaoliu",24,"male"};qr.update(sql,params);}// 数据库查询public void fun2() throws SQLException{// 给出连接参数QueryRunner qr = new QueryRunner(JdbcUtils.getDataSource());// 给出 sql 模板String sql ="SELECT * FROM t_stu WHERE sid=?";// 传入参数Object[] params = {1003};// 执行query() 方法, 需要给出结果集处理器, 即 ResultSetHandler 的实现类.// ResultHandler 实现类也就是将 ResultSet 结果集转换为 Stu 对象Stu stu = qr.query(sql,new BeanHandler<Stu>(Stu.class),params);System.out.println(stu);}
}

参考资料:

  • JavaWeb 视频教程

转载于:https://www.cnblogs.com/linkworld/p/7625704.html

dbUtils 原理相关推荐

  1. DbUtils使用原理详解【不懂的来】

    首先我们通过一个基本的演示来了解一下DBUtils的基本原理 public class UseDButils {public static void main(String[] args) {/*ad ...

  2. 从 java bean 的内省到 dbutils 的应用

    java bean 内省的基础 java bean 的内省,其实可以算是反射的一种基础应用,关于 java 的反射,无非就是获得对应的类.属性.方法.修饰符等的应用,对于 java 的反射探讨,可以点 ...

  3. python调用libs.dbutil_Python 使用 PyMysql、DBUtils 创建连接池,提升性能

    Python 编程中可以使用 PyMysql 进行数据库的连接及诸如查询/插入/更新等操作,但是每次连接 MySQL 数据库请求时,都是独立的去请求访问,相当浪费资源,而且访问数量达到一定数量时,对 ...

  4. 29_Java_数据库_第29天(JDBC、DBUtils)_讲义

    今日内容介绍 1.JDBC 2.DBUtils 01JDBC概念和数据库驱动程序 * A: JDBC概念和数据库驱动程序* a: JDBC概述 * JDBC(Java Data Base Connec ...

  5. DBUtils连接池,websocket

    1.mysql数据库连接池 概念:数据库连接池(Connection pooling)是程序启动时建立足够的数据库连接,并将这些连接组成一个连接池,由程序动态地对池中的连接进行申请,使用,释放. 这样 ...

  6. python数据库连接池工具类_Python数据库连接池DBUtils

    DBUtils简介 DBUtils是Python的一个用于实现数据库连接池的模块. 此连接池有两种连接模式: 模式一:为每个线程创建一个连接,线程即使调用了close方法,也不会关闭,只是把连接重新放 ...

  7. JDBC及DBUtils

    1.JDBC 2.DBUtils ###01JDBC概念和数据库驱动程序 * A: JDBC概念和数据库驱动程序 * a: JDBC概述 * JDBC(Java Data Base Connectiv ...

  8. 真香定律!Android动态换肤实现原理解析,吐血整理

    自己项目中一直都是用的开源的xUtils框架,包括BitmapUtils.DbUtils.ViewUtils和HttpUtils四大模块,这四大模块都是项目中比较常用的.最近决定研究一下xUtils的 ...

  9. 真香定律!Android动态换肤实现原理解析,原理+实战+视频+源码

    自己项目中一直都是用的开源的xUtils框架,包括BitmapUtils.DbUtils.ViewUtils和HttpUtils四大模块,这四大模块都是项目中比较常用的.最近决定研究一下xUtils的 ...

最新文章

  1. C#(Net)软件开发常用工具汇总,提高你的开发效率
  2. linux开机自动执行命令或自动启动程序(rc.local)
  3. 非常棒的jQuery排版用插件
  4. EPERM: operation not permitted, mkdir 'C:\Program Files\nodejs'
  5. python findall函数_python正则表达式之中的findall函数是什么?
  6. java 获取打印机缺纸_JAVASE 语言概述和JAVA
  7. 如何实现HashMap顺序存储
  8. 强化学习《基于策略 - PPO,TRPO,PPO2》
  9. bzoj2705Longge的问题
  10. PB市净率,PE市盈率
  11. 基于scikit-learn的随机森林调参实战
  12. 我的android学习脚步----------- 的第一个应用
  13. 算法:最长公共前缀字符串14. Longest Common Prefix
  14. 向mysql中导入数据库文件
  15. 排队 / 叫号 / 取号 模块使用教程
  16. python计算所得税费用_Python实现的个人所得税计算器示例
  17. 程序员应当正确突破英语障碍
  18. Ubuntu 22.04安装搜狗输入法
  19. linux学习——echo -n 和echo -e 参数意义
  20. pdu电源线_pdu电源插座与普通电源插座的区别

热门文章

  1. 卸载gnome3,投奔Xfce
  2. [Wix] 搞了这么久才知道Wix怎么装
  3. java数据可视化平台初步构想
  4. 3分钟快速presentation
  5. echarts散点图搭配时间轴
  6. [转] Mac os x 使用ftp
  7. JConsole工具使用
  8. ApplicationContext接口不同应用场景的实现
  9. ReactJs 第二章 JSX
  10. 只删除字符串前面的‘*’号。