当前位置: 首页 > news >正文

Apache-DBUtils

目录

封装方法

引出dbutils

案例


当关闭connection后,resultset结果集就无法使用了,这就使得resultset不利于数据的管理

封装方法

我们可以将结果集先存储在一个集合中,当connection关闭后,我们可以通过访问集合来访问结果集

public ArrayList<Actor> testSelectToArrayList() {System.out.println("使用 druid方式完成");//1. 得到连接Connection connection = null;//2. 组织一个sqlString sql = "select * from actor where id >= ?";PreparedStatement preparedStatement = null;ResultSet set = null;ArrayList<Actor> list = new ArrayList<>();//创建ArrayList对象,存放actor对象//3. 创建PreparedStatement 对象try {connection = JDBCUtilsByDruid.getConnection();System.out.println(connection.getClass());//运行类型 com.alibaba.druid.pool.DruidPooledConnectionpreparedStatement = connection.prepareStatement(sql);preparedStatement.setInt(1, 1);//给?号赋值//执行, 得到结果集set = preparedStatement.executeQuery();//遍历该结果集while (set.next()) {int id = set.getInt("id");String name = set.getString("name");//getName()String sex = set.getString("sex");//getSex()Date borndate = set.getDate("borndate");String phone = set.getString("phone");//把得到的resultset 的记录,封装到 Actor对象,放入到list集合list.add(new Actor(id, name, sex, borndate, phone));}System.out.println("list集合数据=" + list);for(Actor actor : list) {System.out.println("id=" + actor.getId() + "\t" + actor.getName());}} catch (SQLException e) {e.printStackTrace();} finally {//关闭资源JDBCUtilsByDruid.close(set, preparedStatement, connection);}//因为ArrayList 和 connection 没有任何关联,所以该集合可以复用.return  list;}

引出dbutils

是Apache组织提供的一个开源的jdbc工具库类,对jdbc进行封装,简化工作量

QueryRunner类:封装了sql的执行,是线程安全的,可以实现增删改查

ResuleSetHandler接口:该接口处理java.sql.ResultSet,将数据按要求转化为另一种格式

案例

使用DBUtils + 数据连接池(德鲁伊)方式,完成对表的actor的crud

1.返回结果为多行

public void testQueryMany() throws SQLException { //返回结果是多行的情况//1. 得到 连接 (druid)Connection connection = JDBCUtilsByDruid.getConnection();List<Actor> list =queryRunner.query(connection, sql, new BeanListHandler<>(Actor.class), 1);System.out.println("输出集合的信息");for (Actor actor : list) {System.out.print(actor);}//释放资源JDBCUtilsByDruid.close(null, null, connection);
}

        (1) query 方法就是执行sql 语句,得到resultset ---封装到 --> ArrayList 集合中
        (2) 返回集合
        (3) connection: 连接
        /4) sql : 执行的sql语句
        (5) new BeanListHandler<>(Actor.class): 在将resultset -> Actor 对象 -> 封装到 ArrayList
           底层使用反射机制 去获取Actor 类的属性,然后进行封装
        (6) 1 就是给 sql 语句中的? 赋值,可以有多个值,因为是可变参数Object... params
        (7) 底层得到的resultset ,会在query 关闭, 关闭PreparedStatment

2.返回结果为单行

public void testQuerySingle() throws SQLException {//1. 得到 连接 (druid)Connection connection = JDBCUtilsByDruid.getConnection();//2. 使用 DBUtils 类和接口 , 先引入DBUtils 相关的jar , 加入到本Project//3. 创建 QueryRunnerQueryRunner queryRunner = new QueryRunner();//4. 就可以执行相关的方法,返回单个对象String sql = "select * from actor where id = ?";// 因为我们返回的单行记录<--->单个对象 , 使用的Hander 是 BeanHandlerActor actor = queryRunner.query(connection, sql, new BeanHandler<>(Actor.class), 1);System.out.println(actor);// 释放资源JDBCUtilsByDruid.close(null, null, connection);}

 3.返回单行单列

public void testScalar() throws SQLException {Connection connection = JDBCUtilsByDruid.getConnection();QueryRunner queryRunner = new QueryRunner();String sql = "select name from actor where id = ?";//因为返回的是一个对象, 使用的handler 就是 ScalarHandlerObject obj = queryRunner.query(connection, sql, new ScalarHandler(), 4);System.out.println(obj);// 释放资源JDBCUtilsByDruid.close(null, null, connection);}

4.dml操作

public void testDML() throws SQLException {Connection connection = JDBCUtilsByDruid.getConnection();QueryRunner queryRunner = new QueryRunner();//这里组织sql 完成 update, insert delete//String sql = "update actor set name = ? where id = ?";//String sql = "insert into actor values(null, ?, ?, ?, ?)";String sql = "delete from actor where id = ?";//(1) 执行dml 操作是 queryRunner.update()//(2) 返回的值是受影响的行数 (affected: 受影响)int affectedRow = queryRunner.update(connection, sql, 1000 );System.out.println(affectedRow > 0 ? "执行成功" : "执行没有影响到表");// 释放资源JDBCUtilsByDruid.close(null, null, connection);}
http://www.lryc.cn/news/128041.html

相关文章:

  • LangChain手记 Agent 智能体
  • 87-基于stm32单片机粮仓仓库环境温湿度烟雾监测报警系统Proteus仿真+源码
  • ChatGPT 调教日记(二):程序员转量化的背景知识
  • 什么是网络地址转换 (NAT)
  • 系统架构设计师---事务管理、并发控制、数据库的备份与恢复
  • 如何更好的维护自己的电脑?
  • element+vue 表格行拖拽功能
  • Python学习笔记_基础篇(三)_数据类型之列表
  • 目标检测YOLO实战应用案例100讲-交通目标检测中传感器数据采集容错控制方法
  • ElasticSearch 8.9.0 开发模式安装
  • docker部署redis
  • ZooKeeper的应用场景(分布式锁、分布式队列)
  • seata 的部署和集成
  • C++入门基础(万字详解!!!)
  • 神经网络基础-神经网络补充概念-53-将batch norm拟合进神经网络
  • Sping源码(六)— prepareBeanFactory()
  • LeetCode(力扣)257. 二叉树的所有路径Python
  • nodejs实现http与https服务;同时处理proxy代理的解决方案
  • C# WPF ListBox 动态显示图片
  • 游戏如何防御DDOS流量攻击呢,用游戏盾真的有用么?
  • vue项目引入antDesignUI组件
  • 非结构化数据库-MinIO基本集成
  • Etcd备份及恢复
  • 使用JavaMail发送邮件时嵌入公司logo图片
  • 注解 @Async
  • Python“牵手”lazada商品评论数据采集方法,lazadaAPI申请指南
  • 微信小程序通用字体代码
  • LVS负载均衡DR模式
  • ArcGIS Pro基础入门、制图、空间分析、影像分析、三维建模、空间统计分析与建模、python融合、案例全流程科研能力提升
  • ​ Spring Clould 配置中心 - Nacos