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

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

大家好,又见面了,我是你们的朋友全栈君。

一.QueryRunner类实现增删改

连接池代码:JdbcUtil.java

package com.wb.util;

/** * c3p0,dbcp,druid */
import java.io.IOException;
import java.io.InputStream;
import java.sql.Connection;
import java.sql.SQLException;
import java.util.Properties;

import javax.sql.DataSource;

import com.alibaba.druid.pool.DruidDataSource;
import com.alibaba.druid.pool.DruidDataSourceFactory;

/** * 绝对不能使用单例 * * @author Administrator 硬编码 */
public class JdbcUtil { 
   
    private static Connection con = null;
    private static DataSource ds = null;
    private static Properties pt = null;
    static { 
   
        // 1.获得当前类的加载器
        ClassLoader cl = JdbcUtil.class.getClassLoader();
        // 通过该加载器得到一个输入流
        InputStream in = cl.getResourceAsStream("jdbc.properties");
        // 通过输入创一个properties对象
        pt = new Properties();
        try { 
   
            pt.load(in);
        } catch (IOException e) { 
   
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
    public static Connection getCon() { 
   

        if (ds == null) { 
   
            try { 
   
                ds = (DruidDataSource) DruidDataSourceFactory.createDataSource(pt);
            } catch (Exception e) { 
   
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
        try { 
   
            return ds.getConnection();
        } catch (SQLException e) { 
   
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        return null;
    }
    public static void closeCon(Connection con) { 
   
        try { 
   
            con.close();
        } catch (SQLException e) { 
   
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
}

具体使用模板:

   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>(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<Emp> getEmpList(Integer pageSize, Integer pageIndex, String empName) { 
   
        List<Emp> empList = new ArrayList<Emp>();
       /* //使用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();
               for(String key: map.keySet()){ 
   
                   switch (key) { 
   
                case "emp_id":
                    emp.setEmpId((Integer) map.get(key));
                    break;
                case "emp_sex":
                    emp.setEmpSex((String) map.get(key));
                    break;
                case "emp_age":
                    emp.setEmpAge((Integer) map.get(key));
                    break;
                case "emp_phone":
                    emp.setEmpPhone((String) map.get(key));
                    break;
                case "emp_name":
                    emp.setEmpName((String) map.get(key));
                    break;
                case "depa_id":
                    emp.setDepaId((Integer) map.get(key));
                    break;
                case "depa_name":
                    emp.setDepaName((String) map.get(key));
                    break;

                default:
                    System.out.println("发生异常");
                    break;
                }
                   //System.out.println(key+"---"+map.get(key));
               }
               empList.add(emp);
           }

        } catch (SQLException e) { 
   
            e.printStackTrace();
        } finally { 
   
            JdbcUtil.closeCon(con);
        }
        for (int i = 0; i < empList.size(); i++) { 
   
            System.out.println(empList.get(i));
        }
        return empList;
    }
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/106654.html原文链接:https://javaforall.net

赞 (0)
全栈程序员-站长的头像全栈程序员-站长

相关推荐

  • 人脸去重算法_哈希去重算法

    人脸去重算法_哈希去重算法对比其他算法『百度的去重算法』百度的去重算法最简单,就是直接找出此文章的最长的n句话,做一遍hash签名。n一般取3。工程实现巨简单,据说准确率和召回率都能到达80%以上。『shingle算法』shingle原理略复杂,不细说。shingle算法我认为过于学院派,对于工程实现不够友好,速度太慢,基本上无法处理海量数据。『其他算法』具体看微博上的讨论…

    2022年10月26日
  • Linux之traceroute命令[通俗易懂]

    Linux之traceroute命令[通俗易懂]显示数据包到主机间的路径,traceroute命令用于追踪数据包在网络上的传输时的全部路径,它默认发送的数据包大小是40字节。通过traceroute我们可以知道信息从你的计算机到互联网另一端的主机是走的什么路径。当然每次数据包由某一同样的出发点(source)到达某一同样的目的地(destination)走的路径可能会不一样,但基本上来说大部分时候所走的路由是相同的。traceroute通过发送小的数据包到目的设备直到其返回,来测量其需要多长时间。一条路径上的每个设备traceroute要测.

    2022年6月20日
  • Python 类继承,__bases__, __mro__, super

    Python 类继承,__bases__, __mro__, super

    2021年12月14日
  • rootfs.bin_libhdfs

    rootfs.bin_libhdfs忘了到底前几年看的一篇什么busybox的教程,写的及其复杂,以至于让我这么久以来一直不敢再去碰这个东西,直到今天又再次有了这个需求,特来再搞一次,没想到不到俩小时,一次搞定,特将这过程记录下来,以后也好有个参考。1环境宿主机:Ubuntu18.04交叉编译工具链:aarch64-linux-gnu-gcc7.4.0目标机:Armv8i.MX8EVKboard2下载…

    2022年10月7日
  • ubuntu安装python3.7,并更新python默认指向为python3.7

    ubuntu安装python3.7,并更新python默认指向为python3.7ubuntu默认带着的python版本不是最新版,因此需要手动安装最新版。查看python的指向。ls-l/usr/bin|greppython可以看到,此时python指向的是python3.4。第一部分:安装python3.71.直接使用apt-get安装python3.7失败:apt-getinstallpython3.72.改为手动安装…

    2022年6月23日
  • Unity零基础到入门 ☀️| 游戏引擎 Unity 从0到1的 系统学习 路线【全面总结-建议收藏】![通俗易懂]

    Unity零基础到入门 ☀️| 游戏引擎 Unity 从0到1的 系统学习 路线【全面总结-建议收藏】![通俗易懂]Unity基础知识学习,Unity学习路线总结。本篇文章对Unity的学习路线做了一个全面系统的总结,对Unity有兴趣的小伙伴福利到了!敬请品尝~

    2022年6月12日

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号