Java开发基础(四)——dbutils的使用

文章目录

  • 前言
  • DBUtils
    • JavaBean组件
    • DBUtils使用
      • QueryRunner核心类:
      • ResultSetHandler结果集处理类
  • 总结

前言

Java开发基础(二)——JDBC的使用中写到,Java与数据库的连接包括:导包、注册驱动、获取与数据库的连接对象、获取SQL语句的执行者对象、获取结果集对象、关闭连接等。其中连接池包含了注册驱动和获取与数据库连接两个步骤,而dbutils简化了其他步骤。

DBUtils

DBUtils简化了JDBC的开发步骤,使得我们可以用更少量的代码实现连接数据库的功能。DBUtils下载地址

JavaBean组件

JavaBean是一个用于封装数据的类,在与数据库连接之中,JavaBean其的作用是将获取的数据库的记录封装到JavaBean中。特性如下:

  1. 需要实现接口:java.io.Serializable ,可以省略不写。
  2. 提供私有字段:private 类型 字段名;
  3. 提供getter/setter方法:
  4. 提供无参构造

获取getter/setter方法,在类中右键->Source->Generate Getters and Setters
Java开发基础(四)——dbutils的使用_第1张图片

DBUtils使用

DBUtils封装了JDBC的操作,核心功能如下:
Dbutils三个核心功能介绍

  1. QueryRunner中提供对sql语句操作的API.
  2. ResultSetHandler接口,用于定义select操作后,怎样封装结果集.
  3. DbUtils类是一个工具类,定义了关闭资源与事务处理的方法

QueryRunner核心类:

  1. QueryRunner(DataSource ds) ;传入参数为连接池
  2. update(String sql, Object… params) ,执行insert update delete操作
  3. query(String sql, ResultSetHandler rsh, Object… params) ,执行 select操作

ResultSetHandler结果集处理类

Java开发基础(四)——dbutils的使用_第2张图片# 使用代码

  • Category.java
// JavaBean
public class Category {
	private String cid;
	private String cname;
	
	public String getCid() {
		return cid;
	}
	public void setCid(String cid) {
		this.cid = cid;
	}
	
	public String getCname() {
		return cname;
	}
	public void setCname(String cname) {
		this.cname = cname;
	}
	@Override
	public String toString() {
		return "Category [cid=" + cid + ", cname=" + cname + "]";
	}
	public Category() {
		super();
		// TODO Auto-generated constructor stub
	}
	public Category(String cid, String cname) {
		super();
		this.cid = cid;
		this.cname = cname;
	}
}
  • C3P0Utils.java
/**
 * 在C3P0连接池中 遵循了javax.sql.DataSource接口的实现类:
 * 		ComboPooledDataSource
 */
import java.beans.PropertyVetoException;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

import javax.sql.DataSource;

import com.mchange.v2.c3p0.ComboPooledDataSource;

public class C3P0Utils {

	private static ComboPooledDataSource ds = new ComboPooledDataSource();	
	// 自动加载C3P0-config.xml文件

	public static DataSource getDataSource(){
		return ds;
	}
	
	public static Connection getConnection() throws SQLException{
		// 获取连接,从C3P0连接池获取
		return ds.getConnection();
	}
	
	// 关闭所有资源的统一代码
	public static void closeAll(Connection conn, Statement st, ResultSet rs){
		//负责关闭
		if(conn != null){
			try {
				conn.close();		// 使用代理,放回到连接池中
			} catch (SQLException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
		if(st != null){
			try {
				st.close();
			} catch (SQLException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
		if(rs != null){
			try {
				rs.close();
			} catch (SQLException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
	}	
}
  • DBUtilsDemo.java
package cn.simon.jdbc.demo03_DBUtils的使用;

import java.sql.SQLException;
import java.util.List;
import java.util.Map;

import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.handlers.ArrayHandler;
import org.apache.commons.dbutils.handlers.ArrayListHandler;
import org.apache.commons.dbutils.handlers.BeanHandler;
import org.apache.commons.dbutils.handlers.BeanListHandler;
import org.apache.commons.dbutils.handlers.ColumnListHandler;
import org.apache.commons.dbutils.handlers.MapHandler;
import org.apache.commons.dbutils.handlers.MapListHandler;
import org.apache.commons.dbutils.handlers.ScalarHandler;

import cn.simon.jdbc.domain.Category;

/**
 *  DBUtils执行数据库查询操作
 *  	1.QueryRunner(DataSource)
 *  	2.query(String sql, ResultSetHandler rsh, Object... params); // 主要执行查询
 */

public class DBUtilsDemo {
	public static void main(String[] args) throws SQLException {
		// TODO Auto-generated method stub

//		queryDemo01();
//		queryDemo02();
//		queryDemo03();
//		queryDemo04();
//		queryDemo05();
		queryDemo06();
//		queryDemo07();
//		queryDemo08();
	}
	
	// ArrayHandler处理类的使用
	public static void queryDemo01() throws SQLException{
		// 1.创建QueryRunner对象
		QueryRunner qr = new QueryRunner(C3P0Utils.getDataSource());
		// 2.执行查询
		Object[] objs = qr.query("select * from category where cid = ?", new ArrayHandler(), 1);
		for(Object o: objs){		// object[]中保存了object对象
			System.out.println(o);
		}
	}
	
	// ArrayListHandler
	public static void queryDemo02() throws SQLException{
		// 1.创建QueryRunner对象
		QueryRunner qr = new QueryRunner(C3P0Utils.getDataSource());
		// 2.执行查询
		List objs = qr.query("select * from category ", new ArrayListHandler());
		for (Object[] objects : objs) {
			System.out.println(objects[0]+"\t"+objects[1]);
		}
	}
	
	// BeanHandler处理类的使用
	public static void queryDemo03() throws SQLException{
		// 1.创建QueryRunner对象
		QueryRunner qr = new QueryRunner(C3P0Utils.getDataSource());
		// 2.执行查询
		String sql = "select * from category";
		Category c = qr.query(sql, new BeanHandler(Category.class));
		System.out.println(c);
	}
	
	// BeanListHandler
	public static void queryDemo04() throws SQLException{
		// 1.创建QueryRunner对象
		QueryRunner qr = new QueryRunner(C3P0Utils.getDataSource());
		// 2.执行查询
		String sql = "select * from category";
		List c = qr.query(sql, new BeanListHandler(Category.class));
		for (Category category : c) {
			System.out.println(category);
		}
	}
	
	// ColumnListHandler处理类的使用
	public static void queryDemo05() throws SQLException{
		// 1.创建QueryRunner对象
		QueryRunner qr = new QueryRunner(C3P0Utils.getDataSource());
		// 2.执行查询
		String sql = "select * from category";
		List c = qr.query(sql, new ColumnListHandler("cname"));
		System.out.println(c);
	}
	
	// MapHandler处理类的使用
	public static void queryDemo06() throws SQLException{
		// 1.创建QueryRunner对象
		QueryRunner qr = new QueryRunner(C3P0Utils.getDataSource());
		// 2.执行查询
		String sql = "select * from category";
		Map map = qr.query(sql, new MapHandler());
		// 3.
		System.out.println(map);
	}
	
	// MapListHandler处理类的使用
	public static void queryDemo07() throws SQLException{
		// 1.创建QueryRunner对象
		QueryRunner qr = new QueryRunner(C3P0Utils.getDataSource());
		// 2.执行查询
		String sql = "select * from category";
		List> maps = qr.query(sql, new MapListHandler());
		// 3.List
		System.out.println(maps);
	}
	
	// MapListHandler处理类的使用
	public static void queryDemo08() throws SQLException{
		// 1.创建QueryRunner对象
		QueryRunner qr = new QueryRunner(C3P0Utils.getDataSource());
		// 2.执行查询
		String sql = "select count(*) from category";
		Long count = qr.query(sql, new ScalarHandler());
		// 3.List
		System.out.println(count);
	}
}
 
  

总结

DBUtils主要就是简化JDBC操作,封装虽好,但还是要知道其中的原理才好。

你可能感兴趣的:(Java)