同过使用C3P0建立的对mysql数据库CRUD操作的工具类

package util;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

import com.mchange.v2.c3p0.ComboPooledDataSource;

public class JdbcUtilC3P0 {
	// 创建连接池的数据源对象
	// mysql指定的是从c3p0-config.xml配置文件中选择那个链配置进行连接
	private static ComboPooledDataSource cpds = new ComboPooledDataSource(
			"mysql");

	// 书写返回连接对象的方法
	public static Connection getConn() {
		try {
			return cpds.getConnection();
		} catch (SQLException e) {
			e.printStackTrace();
		}
		return null;
	}

	// 书写cud的通用的方法
	public static void update(String sql, Object params[]) {
		// 声明预处理对象
		PreparedStatement pstmt = null;
		try {
			// 获取预处理对象
			pstmt = getConn().prepareStatement(sql);
			// 为sql语句进行赋值处理
			if (params != null) {
				for (int i = 0; i < params.length; i++) {
					// 为占位符赋值处理
					pstmt.setObject(i + 1, params[i]);
				}
				// 执行cud的操作
				pstmt.executeUpdate();
			} else {
				System.out.println("参数列表为null");
			}

		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} finally {
			release(null, pstmt, null);
		}
	}

	// r的操作方法(查询的操作处理
	public static Object query(String sql, Object[] params,
			ResultSetHandler resultSetHandler) {
		PreparedStatement pstmt = null;
		ResultSet rs = null;
		try {
			pstmt = getConn().prepareStatement(sql);
			// 参数列表不为null
			if (params != null) {
				// 循环赋值
				for (int i = 0; i < params.length; i++) {
					pstmt.setObject(i + 1, params[i]);
				}
			}
			//执行查询
			rs = pstmt.executeQuery();
			//将rs结果集交给resultSetHandler处理对象进行处理,并将结果返回
			return resultSetHandler.handler(rs);

		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}

		return null;
	}

	// 释放资源的操作
	public static void release(ResultSet rs, PreparedStatement pstmt,
			Connection conn) {
		if (rs != null) {
			try {
				rs.close();
			} catch (SQLException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
		if (pstmt != null) {
			try {
				pstmt.close();
			} catch (SQLException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
		if (conn != null) {
			try {
				conn.close();
			} catch (SQLException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}

	}
}

下面是用来处理接口

package util;

import java.sql.ResultSet;

public interface ResultSetHandler {
	// 交给调用者处理
	public Object handler(ResultSet rs) throws Exception;
}

下面是处理查询单条数据时用到的处理类

package util;

import java.lang.reflect.Field;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;


//这是获取单个数据的处理类
public class BeanHandler implements ResultSetHandler {

	// 声明接收要处理的bean的class对象
	private Class<?> cls;

	// 构造器为接收的class赋值
	public BeanHandler(Class<?> cls) {
		super();
		this.cls = cls;
	}

	// 处理接收到的对象
	@Override
	public Object handler(ResultSet rs) throws Exception {
		// 判断结果集中是否还有数据
		if (rs.next()) {
			// 同过反射处理获取要处理class的对象
			Object bean = cls.newInstance();
			// 获取ResultSet的元数据的ResultSetMetaData对象
			ResultSetMetaData metaData = rs.getMetaData();
			// 循环遍历,为bean内的属性赋值
			for (int i = 1; i <= metaData.getColumnCount(); i++) {
				// 通过元数据获取要赋值的数据字段
				String columnName = metaData.getColumnName(i);
				// 获取字段对应额数据值
				Object columnValue = rs.getObject(columnName);

				// 通过反射获取bean的字段名称对应的Field对象
				// getDeclaredField("");获取指定的字段已经声明过的Field对象
				Field field = bean.getClass().getDeclaredField(columnName);
				// 设置暴力反射开启
				field.setAccessible(true);
				// 为bean中的属性赋值
				field.set(bean, columnValue);
			}
			// 返回设置属性后的bean
			return bean;
		} else {
			return null;
		}
	}

}

下面是处理查询多条数据时用到的处理类

package util;

import java.lang.reflect.Field;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.util.ArrayList;
import java.util.List;


//这是获取数据库中所有的数据的处理类
public class BeanListHandler implements ResultSetHandler {
	// 声明接收要处理的bean的class对象
	private Class<?> cls;

	// 构造器为接收的class赋值
	public BeanListHandler(Class<?> cls) {
		super();
		this.cls = cls;
	}

	// 处理接收到的对象
	@Override
	public Object handler(ResultSet rs) throws Exception {
		// 声明返回的数据集合
		List<Object> list = new ArrayList<Object>();
		// 判断结果集中是否还有数据
		while (rs.next()) {
			// 同过反射处理获取要处理class的对象
			Object bean = cls.newInstance();
			// 获取ResultSet的元数据的ResultSetMetaData对象
			ResultSetMetaData metaData = rs.getMetaData();
			// 循环遍历,为bean内的属性赋值
			for (int i = 1; i <= metaData.getColumnCount(); i++) {
				// 通过元数据获取要赋值的数据字段
				String columnName = metaData.getColumnName(i);
				// 获取字段对应额数据值
				Object columnValue = rs.getObject(columnName);

				// 通过反射获取bean的字段名称对应的Field对象
				// getDeclaredField("");获取指定的字段已经声明过的Field对象
				Field field = bean.getClass().getDeclaredField(columnName);
				// 设置暴力反射开启
				field.setAccessible(true);
				// 为bean中的属性赋值
				field.set(bean, columnValue);
			}
			// 将设置好的目标对象添加到list集合
			list.add(bean);
		}
		return list;
	}
}

下面是通过C3P0连接数据时用到的连接配置文件

<?xml version="1.0" encoding="UTF-8"?>
<c3p0-config>
  <named-config name="xx">
	<property name="jdbcUrl">jdbc:mysql://localhost:3306/test</property>		
	<property name="driverClass">com.mysql.jdbc.Driver</property>		
	<property name="user">root</property>		
	<property name="password">admin</property>
	<property name="initialPoolSize">10</property>		
    <property name="maxPoolSize">30</property>
    <property name="minPoolSize">10</property>
	<property name="acquireIncrement">5</property>
  </named-config>
  
  <named-config name="mysql">
		<property name="driverClass">com.mysql.jdbc.Driver</property>
		<property name="jdbcUrl">jdbc:mysql://localhost:3306/test</property>
		<property name="user">root</property>
		<property name="password">admin</property>
		
		<property name="acquireIncrement">5</property>
		<property name="initialPoolSize">10</property>
		<property name="minPoolSize">5</property>
		<property name="maxPoolSize">30</property>
	</named-config>
</c3p0-config>

c3p0的链接还需要用到

c3p0-0.9.5-pre6.jar

mchange-commons-java-0.2.6.3.jar

两个包

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值