JAVA中DBUtils的QueryRunner类实现增删改查详解

蜂信物联FastBee平台https://gitee.com/beecue/fastbee

阿里资料开源项目https://gitee.com/vip204888

百度低代码前端框架https://gitee.com/baidu/amis

OpenHarmony开源项目https://gitcode.com/openharmony

仓颉编程语言开放项目https://gitcode.com/Cangjie

具体使用模板:

public static void main(String[] args) throws Exception{

//使用自己的工具类,获取数据库的连接对象

Connection conn = MyJDBCUtils.getConnection();

//创建QueryRunner类对象

QueryRunner qr = new QueryRunner();

String sql = “UPDATE gjp_ledger set money=? , ldesc=? where lid=?”;

Object[] params = {998,“买钻石”,3};

int result = qr.update(conn, sql, params);

System.out.println(result);

DbUtils.close(conn);

}

二.QueryRunner类获取查询结果集ResultSetHandler

===================================================================================================

1.常用Handler

  • ArrayHandler 将结果集第一行转成对象数组

public static void main(String[] args) throws Exception{

Connection conn = MyJDBCUtils.getConnection();

String sql = “SELECT * FROM gjp_ledger where lid=?”;

//结果集处理方式,ArrayHandler 第一行转成对象数组

QueryRunner qr = new QueryRunner();

Object[] objects = qr.query(conn, sql, new ArrayHandler(),3);

for(Object obj : objects){

System.out.println(obj);

}

}

  • ArrayListHandler 将结果集中的每一行数据都转成一个对象数组,再将转成的多个对象数组存放到List

public static void main(String[] args) throws Exception{

Connection conn = MyJDBCUtils.getConnection();

String sql = “SELECT * FROM gjp_ledger”;

QueryRunner qr = new QueryRunner();

//执行query方法,传递连接对象,SQL语句,结果集处理方式

ArrayListHandler

List<Object[]> list = qr.query(conn, sql, new ArrayListHandler());

for(Object[] objects : list){

for(Object obj : objects){

System.out.print(obj+" ");

}

System.out.println();

}

}

  • BeanHandler 将结果集第一行数据封装到一个对应的业务类实例中

(1): 定义业务数据类Ledger(实体类,javaBean)

public class Ledger {

//要生成空参、有参构造、set和get方法、toString方法

private int lid;

private String parent;

private double money;

private int sid;

private String account;

private String createtime;

private String ldesc;

}

(2)测试案例代码

public static void main(String[] args) throws Exception{

Connection conn = MyJDBCUtils.getConnection();

String sql = “SELECT * FROM gjp_ledger”;

QueryRunner qr = new QueryRunner();

//BeanHandler泛型,构造方法(和反射有关系的对象)

Ledger legder = qr.query(conn, sql, new BeanHandler(Ledger.class));

System.out.println(legder);

}

  • BeanListHandler 将结果集中的每一行数据都封装到一个对应的业务类实例中,再将多个业务类实例对象存放到List里。

public static void main(String[] args) throws Exception {

Connection conn = MyJDBCUtils.getConnection();

String sql = “SELECT * FROM gjp_ledger”;

//结果集处理方式,BeanListHandler 每一行数据封装到业务数据类中

QueryRunner qr = new QueryRunner();

List list = qr.query(conn, sql, new BeanListHandler(Ledger.class));

for(Ledger ledger : list){

System.out.println(ledger);

}

}

  • MapHandler 将结果集中的第一行数据封装到一个Map中,key是列名,value是对应的值。

public static void main(String[] args) throws Exception {

Connection conn = MyJDBCUtils.getConnection();

String sql = “SELECT * FROM gjp_ledger”;

//结果集处理方式,MapHandler 封装到一个Map集合中,存储键值对集合

QueryRunner qr = new QueryRunner();

Map<String,Object> map = qr.query(conn, sql,new MapHandler());

for(String key : map.keySet()){

System.out.println(key+" "+map.get(key));

}

}

  • MapListHandler 将结果集中的每一行数据都封装到一个Map里,然后再将多个Map存放到List

public static void main(String[] args) throws Exception{

Connection conn = MyJDBCUtils.getConnection();

String sql = “SELECT * FROM gjp_ledger”;

//结果集处理方式,MapListHandler 数据中的每一行封装成Map集合,多个Map集合存储到List集合

QueryRunner qr = new QueryRunner();

List<Map<String,Object>> list = qr.query(conn, sql,new MapListHandler());

for(Map<String,Object> map : list){

for(String key : map.keySet()){

System.out.print(key+" "+map.get(key));

}

System.out.println();

多表联合查询


QueryRunner qr = new QueryRunner();

@Override

public List getEmpList(Integer pageSize, Integer pageIndex, String empName) {

List empList = new ArrayList();

/*

//使用new BeanListHandler<>(Emp.class);会导致集合里面字段为空

Connection con = JdbcUtil.getCon();

String sql = “select emp_id empId,emp_name empName,emp_phone empPhone,emp_age empAge,emp_sex empSex,e.depa_id depaId, d.depa_name depaName FROM emp e INNER JOIN depa d ON e.depa_id=d.depa_id WHERE e.emp_name like ? limit ?,?”;

try {

empList = qr.query(con, sql, new BeanListHandler<>(Emp.class),

empName == null || “”.equals(empName) ? “%%” : “%” + empName + “%”,

(pageIndex - 1) * pageSize, pageSize);

} catch (SQLException e) {

e.printStackTrace();

} finally {

JdbcUtil.closeCon(con);

}

for (int i = 0; i < empList.size(); i++) {

System.out.println(empList.get(i));

}*/

//使用 new MapListHandler() 需要手动遍历

Connection con = JdbcUtil.getCon();

String sql = “select emp_id,emp_name,emp_phone,emp_age,emp_sex,e.depa_id, depa_name FROM emp e INNER JOIN depa d ON e.depa_id=d.depa_id WHERE e.emp_name like ? limit ?,?”;

try {

List<Map<String,Object>> list = qr.query(con, sql, new MapListHandler(),

empName == null || “”.equals(empName) ? “%%” : “%” + empName + “%”,

(pageIndex - 1) * pageSize, pageSize);

for(Map<String,Object> map:list){

Emp emp = new Emp();

总结

三个工作日收到了offer,头条面试体验还是很棒的,这次的头条面试好像每面技术都问了我算法,然后就是中间件、MySQL、Redis、Kafka、网络等等。

  • 第一个是算法

关于算法,我觉得最好的是刷题,作死的刷的,多做多练习,加上自己的理解,还是比较容易拿下的。

而且,我貌似是将《算法刷题LeetCode中文版》、《算法的乐趣》大概都过了一遍,尤其是这本

《算法刷题LeetCode中文版》总共有15个章节:编程技巧、线性表、字符串、栈和队列、树、排序、查找、暴力枚举法、广度优先搜索、深度优先搜索、分治法、贪心法、动态规划、图、细节实现题

最新出炉,头条三面技术四面HR,看我如何一步一步攻克面试官?

《算法的乐趣》共有23个章节:

最新出炉,头条三面技术四面HR,看我如何一步一步攻克面试官?

最新出炉,头条三面技术四面HR,看我如何一步一步攻克面试官?

  • 第二个是Redis、MySQL、kafka(给大家看下我都有哪些复习笔记)

基本上都是面试真题解析、笔记和学习大纲图,感觉复习也就需要这些吧(个人意见)

最新出炉,头条三面技术四面HR,看我如何一步一步攻克面试官?

  • 第三个是网络(给大家看一本我之前得到的《JAVA核心知识整理》包括30个章节分类,这本283页的JAVA核心知识整理还是很不错的,一次性总结了30个分享的大知识点)

最新出炉,头条三面技术四面HR,看我如何一步一步攻克面试官?

14431)]

《算法的乐趣》共有23个章节:

[外链图片转存中…(img-e9qrxtmd-1725155214432)]

[外链图片转存中…(img-AitOzUKZ-1725155214432)]

  • 第二个是Redis、MySQL、kafka(给大家看下我都有哪些复习笔记)

基本上都是面试真题解析、笔记和学习大纲图,感觉复习也就需要这些吧(个人意见)

[外链图片转存中…(img-O8bhiVkC-1725155214433)]

  • 第三个是网络(给大家看一本我之前得到的《JAVA核心知识整理》包括30个章节分类,这本283页的JAVA核心知识整理还是很不错的,一次性总结了30个分享的大知识点)

[外链图片转存中…(img-WCIorcKZ-1725155214433)]

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值