Apache---DbUtils组件的使用

java 同时被 3 个专栏收录
8 篇文章 0 订阅
1 篇文章 0 订阅
2 篇文章 0 订阅

DbUtils组件

commons-dbutils Apache 组织提供的一个开源 JDBC工具类库,它是对JDBC的简单封装,并且使用dbutils能极大简化jdbc编码的工作量,同时也不会影响程序的性能!

下载jar包

jar包:http://mirrors.shu.edu.cn/apache/commons/dbutils/binaries/

dbutils的源码文件:http://mirrors.shu.edu.cn/apache/commons/dbutils/source/

下载jar包的同时也可以下载相关的源码文件,在编码的过程中可以通过源码的关联去查看相关对象和相关方法,也方便我们平时的学习。

MyEclipse源码关联方法

按住Ctrl键,把鼠标移动要关联源码的对象中去,再点进去,选择Attach Source,如果源码文件没有解压的话,就选择External File,找到存放源码的正确路径;若是个文件夹的话,就选择External Folder,找到存放源码的正确路径。

API

 org.apache.commons.dbutils.QueryRunner--->DbUtils核心工具类对象

org.apache.commons.dbutils.ResultSetHandler---->结果集,

QueryRunner

该类简化了sql查询,与ResultSetHandler组合一起能够完成大部分的数据库操作,减少代码量。主要方法如下:

查询

public <T> T query(Connection conn,String sql,ResultSetHandler<T> rsh)throwsSQLException ---->执行一个不需要置换参数的查询操作

public <T> T query(Connection conn,String sql,ResultSetHandler<T> rsh,Object... params)throws SQLException---->执行一个查询操作,params为可变的置换参数

批处理

public int[] batch(Connection conn,String sql,Object[][] params)throws SQLException---->params对象数组中的数据都是用来插入,可以一次性插入数组里面的全部数据

//批处理
	@Test
	public void testBatch() throws Exception {
		String sql="insert into admin (userName,passWord) values(?,?)";
		 conn= JdbcUtils.getConnection();
		 // 创建DbUtils核心工具类对象
		 QueryRunner qr= new QueryRunner();
		 //执行插入
		 qr.batch(conn, sql,new Object[][]{{"ld","1212"},{"婧","221221"}});
		 JdbcUtils.closeAll(conn, null, null);
	}

更新

public int update(Connection conn,String sql,Object... params) throws SQLException---->执行更新(删除、修改、插入)操作,params为可变置换参数

public int update(Connection conn,String sql ) throws SQLException----执行不需要置换参数的更新

@Test
	public void testUpdate() throws Exception {
		String sql="delete from admin where id=?";
		 conn= JdbcUtils.getConnection();
		 // 创建DbUtils核心工具类对象
		 QueryRunner qr= new QueryRunner();
		 //执行更新
		 qr.update(conn, sql, 2);
		 JdbcUtils.closeAll(conn, null, null);
	}

ResultSetHandler

该接口用于处理java.sql.ResultSet,将数据按照要求转换为另一种形式,只提供了一个方法handle(ResultSet rs),我们可以自己来自定义实现该接口,只需要重写该handle(ResultSet rs)方法就行了,或者直接使用它的实现类来处理。

常用的实现类

BeanHandler--->查询返回结果集中第一行数据封装到一个javaBean

BeanListHandler--->查询返回结果集每一行数据都封装到JavaBean,存放到List中去

ArrayHandler--->查询返回结果集中第一行数据转成对象数组

ArrayListHandler--->查询返回结果集每一行数据转成对象数组,存放都List中去

MapHandler--->查询返回结果集第一行数据封装到一个Map,key是列名称,value是对应的值

BeanMapHandler--->把查询的每一行都封装为JavaBean,再添加到Map

ScalarHandler--->查询返回结果记录的第一行的第一列,在聚合函数统计的时候使用,如count()函数

编码实现

表的创建

create table `Admin`( 
   `id` int(11) NOT NULL AUTO_INCREMENT , 
   `userName` varchar(20) , 
   `passWord` varchar(20) , 
   PRIMARY KEY (`id`)
 )

连接|关闭数据库的工具类

public class JdbcUtils {
	private static String url="jdbc:mysql://localhost:3306/jdbc_deom";
	private static String user="root";
	private static String password="root";
	/**
	 * 返回连接
	 * @return
	 */
	public static Connection getConnection(){
		try {
			//注册连接驱动
			Class.forName("com.mysql.jdbc.Driver");
			//返回连接
			return DriverManager.getConnection(url, user, password);
		} catch (Exception e) {
			throw new RuntimeException(e);
		} 
	}
	
	/**
	 * 关闭所有连接
	 * @param conn
	 * @param stm
	 * @param rs
	 */
	public static void closeAll(Connection conn,Statement stm,ResultSet rs){
		try {
			if (rs!=null){
				rs.close();
				rs=null;
			}
			if (stm !=null){
				stm.close();
				stm=null;
			}
			if (conn !=null){
				conn.close();
				conn=null;
			}
		} catch (Exception e) {
			throw new RuntimeException(e);
		}
	}
}

JavaBean

public class Admin {
	private int id;
	private String userName;
	private String passWord;
	
	public Admin() {
		super();
	}
	public int getId() {
		return id;
	}
	public void setId(int id) {
		this.id = id;
	}
	public String getUserName() {
		return userName;
	}
	public void setUserName(String userName) {
		this.userName = userName;
	}
	public String getPassWord() {
		return passWord;
	}
	public void setPassWord(String passWord) {
		this.passWord = passWord;
	}
	@Override
	public String toString() {
		return "Admin [id=" + id + ", userName=" + userName + ", passWord="
				+ passWord + "]";
	}
}

自定义结果集

去实现接口ResultSetHandler并复写里面的方法handler(ResultSet rs)

public class MyJdbc {
	private Connection conn;
	@Test
	public void testSet() throws Exception {
		String sql="select * from admin where id=?";
		conn=JdbcUtils.getConnection();
		QueryRunner qr=new QueryRunner();
		Admin a=qr.query(conn, sql, new ResultSetHandler<Admin>(){
			//复写handle方法
			public Admin handle(ResultSet rs) throws SQLException {
				if(rs.next()){
					Admin admin=new Admin();
					//封装数据
					admin.setId(rs.getInt("id"));
					admin.setUserName(rs.getString("userName"));
					admin.setPassWord(rs.getString("passWord"));
					return admin;
				}
				return null;
			}
			
		},4);
		System.out.println(a);
		conn.close();
	}
}

利用DbUtils组件提供的结果集对象封装数据

 

  • 使用BeanHandler结果集
@Test
	public void testQuery() throws Exception {
		String sql="select * from admin where id=?";
		conn=JdbcUtils.getConnection();
		//创建Dbutils核心工具类对象
		QueryRunner qr=new QueryRunner();
		Admin admin=qr.query(conn, sql, new  BeanHandler<Admin>(Admin.class),4);
		System.out.println(admin);
		conn.close();
	}

 

  • 使用BeanListHandler结果集
@Test
	public void testList() throws Exception {
		String sql="select * from admin";
		conn=JdbcUtils.getConnection();
		//创建DBUtils的核心工具类对象
		QueryRunner qr=new QueryRunner();
		//查询返回一个集合,数据都封装进JavaBean对象里面去,再存储到List
		List<Admin> list=qr.query(conn, sql, new  BeanListHandler<Admin>(Admin.class));
		System.out.println(list);
		conn.close();
	}

 使用ArrayHandler结果集

@Test
	public void testArray() throws Exception {
		String sql="select * from admin";
		conn=JdbcUtils.getConnection();
		//创建DBUtils的核心工具类对象
		QueryRunner qr=new QueryRunner();
		//返回表里面的第一条数据
		Object [] obj=qr.query(conn, sql, new ArrayHandler());
		System.out.println(obj[1]);
		conn.close();
	}

使用ArrayListHandler结果集

@Test
	public void testArrayList() throws Exception {
		String sql="select * from admin";
		conn=JdbcUtils.getConnection();
		//创建DBUtils的核心工具类对象
		QueryRunner qr=new QueryRunner();
		//返回表里面的第一条数据
		List<Object[]> obj=qr.query(conn, sql, new ArrayListHandler());
		for (Object[] objects : obj) {
			System.out.println(objects[0]+":"+objects[1]+":"+objects[2]);
		}
		conn.close();
	}

 

  • 使用MapHandler结果集
@Test
	public void testMap() throws Exception {
		String sql="select * from admin";
		conn=JdbcUtils.getConnection();
		//创建DBUtils的核心工具类对象
		QueryRunner qr=new QueryRunner();
		Map<String, Object> map= qr.query(conn, sql, new MapHandler());
		System.out.println(map.keySet());
	}

 使用BeanMapHandler结果集

@Test
	public void testBeanMap() throws Exception {
		String sql="select * from admin";
		conn=JdbcUtils.getConnection();
		//创建DBUtils的核心工具类对象
		QueryRunner qr=new QueryRunner();
		Map<Integer,Admin>map=qr.query(conn, sql, new BeanMapHandler<Integer,Admin>(Admin.class));
		System.out.println(map.keySet());
		System.out.println(map);
		conn.close();
	}

 

  •  使用ScalarHandler结果集
@Test
	public void testScalarHandler() throws Exception {
		String sql="select count(*) from admin";
		conn=JdbcUtils.getConnection();
		//创建DBUtils的核心工具类对象
		QueryRunner qr=new QueryRunner();
		System.out.println(qr.query(conn, sql, new ScalarHandler()));
	}

 

  • 5
    点赞
  • 0
    评论
  • 7
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

©️2021 CSDN 皮肤主题: 数字20 设计师:CSDN官方博客 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值