Java-DBUtils操作数据库

Java-DBUtils操作数据库

封装了JDBC,简化了其操作数据库的步骤

一、执行sql语句

QueryRunner类

  1. update(String sql, Object… params) ,执行insert update delete操作
  2. query(String sql, ResultSetHandler rsh, Object… params) ,执行 select操作
public void test(){
        Connection connection = null;
        try {
            connection = DruidUtils.getConnection();
            QueryRunner queryRunner = new QueryRunner();
            String sql = "select * from t_user where `id` = ?";
            BeanHandler<User> beanHandler = new BeanHandler<>(User.class);
            //User中得有setter方法,且属性名应该和表数据中的字段名相同
            User user = queryRunner.query(connection, sql, beanHandler, 4);
            System.out.println(user);
        } catch (SQLException e) {
            e.printStackTrace();
        } finally {
            DruidUtils.close(connection);
        }
    }

二、处理结果集

ResultSetHandler

2

public void test(){
        Connection connection = null;
        try {
            connection = DruidUtils.getConnection();
            QueryRunner queryRunner = new QueryRunner();
            String sql = "select * from t_user";
            BeanListHandler<User> beanListHandler = new BeanListHandler<>(User.class);
            List<User> userList = queryRunner.query(connection, sql, beanListHandler);
            userList.forEach(System.out::println);
        } catch (SQLException e) {
            e.printStackTrace();
        } finally {
            DruidUtils.close(connection);
        }
    }

ScalarHandler用于查询表中的特殊值

比如count(*)/max()

返回object对象,需要强制转换成所需要的对象,如下

ScalarHandler handler = new ScalarHandler()
Date birth = (Date) runner.query(connection,sql,handle);

如果count需要转为long而不是int

三、注意事项

如果表中的字段名与类中的不一样,为了查询操作结果的准确性,我们需要编写sql时使用类的属性名作为select后字段的别名

原因(sql语句的执行原理)
BeanHandler<Person> handler = new BeanHandler<>(Person.class);
//保存数据的Object对象的显式转换类型是由handler参数决定的
QueryRunner runner = new QueryRunner();
Person p = runner.query(connection,sql,handler,param);
//通过反射创建Person类的对象,后调用指定类的指定方法setXxx(),对相关属性xxx进行赋值

执行语句Person p = runner.query(connection,sql,handler,param);

通过参数handler的泛型确定需要查询和返回的类对象,并传入对应类的字节码文件

随后通过反射创建这个类的对象(调用Class类的newInstance()),即

Class personClass = Person.class;
Person person = personClass.newInsatance();

随后执行sql语句,通过反射执行setXxx方法(先调用personClass.getMethod()获取该方法,参数分别传入“set+sql语句查询到的结果的字段名(首字母大写)”,以及setXxx方法所需要的参数的类型对应的class对象,随后通过上述方法返回的method对象的invoke方法,参数传入sql查询到的对应的值))

Method method = personClass.getMethod(“setHeight”,int.class);//height为字段名,int为setHeight函数需要的参数类型

method.invoke(170);

这时我们会发现,如果调用传入的sql语句的字段名与类的属性名不同

如属性名为height,但字段名为person_height,则构造出的传给getMethod第一个参数的字符串为“setPerson_height”

则sql语句所构造出的setXxx语句在该类中找不到对应的方法(因为类中setXxx方法的Xxx对应类的属性名——setHeight())

所以无法成功执行赋值,故返回对象的各个值将为空

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
commons-dbutils-1.7 jar是Apache Commons项目中的一个Java库,主要用于简化和优化数据库操作。该jar包提供了一组实用工具类,可以减少编写JDBC代码的工作量,同时提供了一种简单而强大的方式来处理数据库连接和查询。 commons-dbutils-1.7 jar主要包括以下几个核心类和接口: 1. QueryRunner:用于执行SQL语句,提供了一系列的查询方法,可以方便地执行查询操作并返回结果。 2. ResultSetHandler:用于处理SQL查询结果集,提供了多种实现类如BeanHandler、BeanListHandler、ScalarHandler等,方便处理不同类型的查询结果。 3. ResultSetExtractor:用于提取结果集中的数据,可以通过自定义的方式从结果集中获取数据并进行处理。 4. BatchExecutor:用于执行批量SQL语句,可以一次性执行多个SQL语句,提高数据库操作的效率。 通过使用commons-dbutils-1.7 jar,可以简化数据库操作代码的编写过程,减少重复劳动。它隐藏了许多JDBC的细节,提供了一种更高级别的抽象,使开发者可以更加专注于业务逻辑的实现,而不是过多关注数据库操作的细节。 另外,commons-dbutils-1.7 jar还具备良好的可扩展性和灵活性,可以与其他开源框架(如Spring、Hibernate)和数据库(如MySQL、Oracle)无缝集成,以满足不同项目的需求。 总之,commons-dbutils-1.7 jar是一个功能强大且易于使用的Java库,可以简化和优化数据库操作,提高开发效率和代码质量。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

得过且过的勇者y

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值