DBUtils概述

【一】概述

DBUtils是java编程中的数据库操作实用工具,小巧简单实用。

DBUtils封装了对JDBC的操作,简化了JDBC操作,可以少写代码。

Dbutils三个核心功能介绍

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

注意:DBUtils就是JDBC的简化开发工具包。需要项目导入commons-dbutils-1.6.jar才能够正常使用DBUtils工具。

【二】 核心功能

QueryRunner核心类:

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

1.针对insert、delete、update操作

public void testUpdateInsert() {
		Connection conn=null;
		QueryRunner qr=new QueryRunner();
		String sql="insert into student(sname,age) values(?,?)";
		
		try {
			conn=JDBCTools.getConnection();
			qr.update(conn, sql, "zhaoliu",100);//可以执行insert、delete、update
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}finally {
			JDBCTools.close(null, conn);
		}
	}

2.针对select查询

前提:

student类

package com.jdbc.dbutils;

public class Student {
	private int id;
	private String name;
	private int age;
	 
	 
	public Student() {
		super();
	}
	@Override
	public String toString() {
		return "Student [id=" + id + ", name=" + name + ", age=" + age + "]";
	}
	public Student(int id, String name, int age) {
		super();
		this.id = id;
		this.name = name;
		this.age = age;
	}
	public int getId() {
		return id;
	}
	public void setId(int id) {
		this.id = id;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public int getAge() {
		return age;
	}
	public void setAge(int age) {
		this.age = age;
	}
	
	
}

JDBCTools工具类

package com.jdbc.dbutils;

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 JDBCTools {
	public static Connection getConnection() throws SQLException {
		DataSource dSource=new ComboPooledDataSource("helloc3p0");
		return dSource.getConnection();
	}
	
	public static void close(Statement stat,Connection conn) {
		close(null,stat, conn);
	}
	public static void close(ResultSet rs,Statement stat,Connection conn) {
		if(rs!=null) {
			try {
				rs.close();
			} catch (Exception e) {
				e.printStackTrace();
			}
		}
		if(stat!=null) {
			try {
				stat.close();
			} catch (Exception e) {
				e.printStackTrace();
			}
		}
		if(conn!=null) {
			try {
				conn.close();
			} catch (Exception e) {
				e.printStackTrace();
			}
		}
	}
	
}

【ResultSetHandler接口】:

注:query方法的返回值取决于ResultSetHandler的handle()方法的返回值。

class MyResultSetHandler implements ResultSetHandler{

		@Override
		public Object handle(ResultSet rs) throws SQLException {
			// TODO Auto-generated method stub
			List students=new ArrayList<>();
			while(rs.next()) {
				int sid=rs.getInt(1);
				String sname=rs.getString(2);
				int sage=rs.getInt(3);
				Student stu=new Student(sid,sname,sage);
				students.add(stu);
			}
			return students;
		}
		
	}
	@Test
	public void testResultSetHandler() {
		query方法的返回值取决于其ResultSetHandler的handle()方法的返回值
		
		Connection connection=null;
		try {
			
			connection=JDBCTools.getConnection();
			QueryRunner qr=new QueryRunner();
			String sql="select sid,sname,age from student";
			Object object=qr.query(connection, sql, new MyResultSetHandler());
			System.out.println(object);
		} catch (Exception e) {
			// TODO: handle exception
			e.printStackTrace();
		}finally {
			JDBCTools.close(null, connection);
		}
	}

【BeanHandler】:把结果集的第一条记录转为创建BeanHandler对象时传入的Class参数所对应的对象。

【BeanListHandler】:把结果集转为一个List,该List不为null,但可能为空集合(size()方法的返回值为0)。若SQL语句能查询到记录,List中存放创建BeanHandler传入Class对象对应的对象。

@Test
	public void testBeanHandler() {
		/*BeanHandler:把结果集的第一条记录转为创建BeanHandler对象时传入的Class参数所对应的对象*/
		Connection connection=null;
		try {
			QueryRunner qr=new QueryRunner();
			connection=JDBCTools.getConnection();
			//注意此处SQL中的别名保持与实体类对象的属性名一致
			String sql="select sid id,sname name,age from student where sid>=?";
			Student student=qr.query(connection, sql, new BeanHandler<>(Student.class), 5);
			System.out.println(student);
		} catch (Exception e) {
			// TODO: handle exception
			e.printStackTrace();
		}finally {
			JDBCTools.close(null, connection);
		}
	}
	
	@Test
	public void testBeanListHandler() {
		/*BeanListHandler:
		 * 把结果集转为一个List,该List不为null,但可能为空集合(size()方法返回值为0)
		 * 若SQL语句能够查询到记录,List中存放创建BeanListHandler传入的Class对象对应的对象。
		 * */
		Connection connection=null;
		try {
			QueryRunner qr=new QueryRunner();
			connection=JDBCTools.getConnection();
			//注意此处SQL中的别名保持与实体类对象的属性名一致
			String sql="select sid id,sname name,age from student where sid>=?";
			List students=qr.query(connection, sql, new BeanListHandler<>(Student.class), 5);
			System.out.println(students);
		} catch (Exception e) {
			// TODO: handle exception
			e.printStackTrace();
		}finally {
			JDBCTools.close(null, connection);
		}
	}

【MapHandler】:返回SQL对应的第一条记录对应的Map对象,键:SQL查询的列名,值:列的值。

【MapListHandler】:将结果集转为一个Map的List,Map对应查询的一条记录,键:SQL查询的列名,值:列对应的值。

@Test
	public void testMapHandler() {
		/*MapHandler:返回SQL对应的第一条记录对应的Map对象
		 * 键:SQL查询的列名,值:列的值
		 * */
		Connection connection=null;
		try {
			QueryRunner qr=new QueryRunner();
			connection=JDBCTools.getConnection();
			//注意此处SQL中的别名保持与实体类对象的属性名一致
			String sql="select sid id,sname name,age from student";
			Map students=qr.query(connection, sql, new MapHandler());
			System.out.println(students);
		} catch (Exception e) {
			// TODO: handle exception
			e.printStackTrace();
		}finally {
			JDBCTools.close(null, connection);
		}
	}
	
	@Test
	public void testMapListHandler() {
		/*MapListHandler:将结果集转为一个Map的List
		 * Map对应查询的一条记录:键:SQL查询的列名,值:列的值
		 * MapListHandler:返回的多条记录对应的Map的集合
		 * */
		Connection connection=null;
		try {
			QueryRunner qr=new QueryRunner();
			connection=JDBCTools.getConnection();
			//注意此处SQL中的别名保持与实体类对象的属性名一致
			String sql="select sid id,sname name,age from student";
			List> students=qr.query(connection, sql, new MapListHandler());
			System.out.println("MapListHandler:"+students);
		} catch (Exception e) {
			// TODO: handle exception
			e.printStackTrace();
		}finally {
			JDBCTools.close(null, connection);
		}
	}

 【ScalarHandler】:把结果集转为一个数值(任意基本数据类型、字符串、Date等)返回。如果查询多列的值,默认返回第一列的值。

@Test
	public void testScalarHandler() {
		/*ScalarHandler:把结果集转为一个数值(可以是任意基本数据类型、字符串、Date等)返回
		 * 如果查询多列的值,默认返回第一列的值
		 * */
		Connection connection=null;
		try {
			QueryRunner qr=new QueryRunner();
			connection=JDBCTools.getConnection();
			//注意此处SQL中的别名保持与实体类对象的属性名一致
			String sql="select count(*) from student";
			Object num=qr.query(connection, sql, new ScalarHandler<>());
			System.out.println("ScalarHandler:"+num);
		} catch (Exception e) {
			// TODO: handle exception
			e.printStackTrace();
		}finally {
			JDBCTools.close(null, connection);
		}
	}

 

你可能感兴趣的:(基础篇,DBUtils)