DBUtils和C3P0的使用

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_40348465/article/details/88015003

     Commons DbUtils是Apache组织提供的一个对JDBC进行简单封装的开源工具类库,使用它能够简化JDBC应用程序的开发,同时也不会影响程序的性能。

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

关于DBUtils的单独使用可以参考:https://blog.csdn.net/qq_40348465/article/details/83662643

DbUtils 关闭链接等操作

QueryRunner 进行查询的操作

org.apache.commons.dbutils.handlers

ArrayHandler :将ResultSet中第一行的数据转化成对象数组

ArrayListHandler将ResultSet中所有的数据转化成List,List中存放的是Object[]

BeanHandler :将ResultSet中第一行的数据转化成类对象

BeanListHandler :将ResultSet中所有的数据转化成List,List中存放的是类对象

ColumnListHandler :将ResultSet中某一列的数据存成List,List中存放的是Object对象

KeyedHandler :将ResultSet中存成映射,key为某一列对应为Map。Map中存放的是数据

MapHandler :将ResultSet中第一行的数据存成Map映射

MapListHandler :将ResultSet中所有的数据存成List。List中存放的是Map

ScalarHandler :将ResultSet中一条记录的其中某一列的数据存成Object

org.apache.commons.dbutils.wrappers

SqlNullCheckedResultSet :对ResultSet进行操作,改版里面的值

StringTrimmedResultSet :去除ResultSet中中字段的左右空格。Trim()

主要方法:

DbUtils类:启动类,jdbc辅助方法的集合类,线程安全。

QueryRunner类:执行SQL语句的类,可以设置查询结果集的封装策略,线程安全。

ResultSetHandler接口:转换类型接口,将封装结果集中的数据,转换到另一个对象。

MapListHandler类:实现类,把记录转化成List。

BeanListHandler类:实现类,把记录转化成List,使记录为JavaBean类型的对象。

  C3P0是一个开源的JDBC连接池,它实现了数据源和JNDI绑定,支持JDBC3规范和JDBC2的标准扩展。目前使用它的开源项目有Hibernate,Spring等,C3P0它相对于DBCP,它拥有自动回收空闲连接的功能。

  使用示例:

 工程目录:

1.导包:   jdbc: mysql-connector-java-x.x.xx-bin.jar;

                c3p0: c3p0-.x.x.x.x.jar,mchange-commons.java-.x.x.xx.jar;           

                 dbutils: commons-dbutils-x.x.jar.

2.配置连接池 c3p0-config.xml,注意需为c3p0开头

<?xml version="1.0" encoding="UTF-8"?>
<c3p0-config>
	<!-- 默认配置,如果没有指定则使用这个配置 -->
	<default-config>
		<!-- 基本配置 -->
		<property name="driverClass">com.mysql.jdbc.Driver</property>
		<property name="jdbcUrl">jdbc:mysql://127.0.0.1:3306/数据库名?characterEncoding=utf-8
		</property>
		<property name="user">root</property>
		<property name="password"></property>

		<!--扩展配置 -->
		<property name="checkoutTimeout">30000</property>
		<property name="idleConnectionTestPeriod">30</property>
		<property name="initialPoolSize">5</property>
		<property name="maxIdleTime">30</property>
		<property name="maxPoolSize">50</property>
		<property name="minPoolSize">5</property>
		<property name="maxStatements">100</property>
	</default-config>

</c3p0-config> 
 

      3.编写工具类

package utils;

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 JdbcUtil {
	// 数据源
	private static DataSource dataSource;
	static {
		dataSource = new ComboPooledDataSource();
	}

	// 获取数据源
	public static DataSource getDataSource() {
		return dataSource;
	}

	// 获取数据库连接对象
	public static Connection getConnection() throws SQLException {
		return dataSource.getConnection();
	}

	// 释放资源
	public static void close(Connection conn, Statement stmt, ResultSet rs) {
		if (conn != null) {
			try {
				conn.close();
			} catch (SQLException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
		if (stmt != null) {
			try {
				stmt.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();
			}
		}
	}

}

    4.使用示例

package domain;

import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.handlers.BeanHandler;
import org.apache.commons.dbutils.handlers.BeanListHandler;

import model.Employee;
import utils.JdbcUtil;

public class EmpDao {

	private QueryRunner runner = new QueryRunner(JdbcUtil.getDataSource());

	// 增加
	public boolean add(Employee emp) {
		boolean flag = false;
		String sql = "insert into emp(empName,deptId) VALUES(?,?); ";
		Object[] params = new Object[] { emp.getEmpName(), emp.getDept().getDeptId() };
		try {
			int row = runner.update(sql, params);
			System.out.println("添加成功!");
			flag = row > 0 ? true : false;
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		return flag;
	}

	// 修改
	public boolean update(Employee emp) {
		boolean flag = false;
		String sql = "update emp set empName=?,deptId=? where empId=?";
		Object[] params = new Object[] { emp.getEmpName(), emp.getDept().getDeptId(), emp.getEmpId() };
		try {
			int row = runner.update(sql, params);
			System.out.println("修改成功!");
			flag = row > 0 ? true : false;
		} catch (SQLException e) {
			e.printStackTrace();
		}

		return flag;
	}

	// 删除
	public boolean delete(int empId) {
		boolean flag = false;
		String sql = "delete from emp where empId=?";
		Object[] params = new Object[] { empId };
		try {
			int row = runner.update(sql, params);
			System.out.println("删除成功!");
			flag = row > 0 ? true : false;
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}

		return flag;
	}

	// 获取一条记录
	public Employee getEmpById(String empId) {
		Employee emp = null;
		String sql = "select * from emp where empId=?";
		Object[] params = new Object[] { empId };
		try {
			emp = runner.query(sql, new BeanHandler<Employee>(Employee.class), params);
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		return emp;
	}

	// 查询多条记录
	public List<Employee> getAllEmp() {
		List<Employee> list = new ArrayList<Employee>();
		String sql = "select * from emp;";
		try {
			list = runner.query(sql, new BeanListHandler<Employee>(Employee.class));
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		return list;
	}
}

猜你喜欢

转载自blog.csdn.net/qq_40348465/article/details/88015003
今日推荐