1.什么是c3p0?
数据连接的管道,链接数据库与数据访问层
2.怎么应用?
(1)加载c3p0的jar架包
csp0框架-----c3p0-0.9.2.1架包------lib(内容三个包全部复制)-----项目WebRoot----lib(如果没有加载到Web APP中点击右键选中包点击Build Path)
(2)做c3p0的连接配置
src下面新建File(c3p0.properties)添加内容:
c3p0.jdbcUrl=jdbc:oracle:this:@127.0.0.1:1521:orcl //jdbc访问地址
c3p0.driverClass=oracle.jdbc.driver.OracleDriver
c3p0.user=car //
c3p0.password=123 //
c3p0.acquireIncrement=3 //链接增涨数
c3p0.idleConnectionTestPeriod=60 //链接等待时间
c3p0.initialPooISize=10 //最开始连接池大小
c3p0.maxIdleTime=60
c3p0.maxPoolsize=20
c3p0.maxStatements=100
c3p0.minPoolSize=5
获取连接对象的方法:
import java.sql.Connection;
import java.sql.SQLException;
import javax.sql.DataSource;
import com.mchange.v2.c3p0.ComboPooledDataSource;
public class C3p0ConnectionHelper {
//要让其在内存中长期存在
private static DataSource ds;
//private static Connection con=null;//判断连接池
//对连接对象创建一个人副本
private static ThreadLocal<Connection> t=new ThreadLocal<Connection>();
static{
ds=new ComboPooledDataSource();
}
/**
* 获取连接对象
* @return
* @throws SQLException
*/
public static Connection getConnection() throws SQLException{
//DataSource ds=new ComboPooledDataSource();//会自动在src目录下找c3p0的配置
//return ds.getConnection();
Connection con=t.get();
if(con==null){
con=ds.getConnection();
t.set(con);//创建一个线程变量的副本
}
return con;
}
/**
* 关闭连接对象的方法
* @throws SQLException
*/
public static void closeConnection() throws SQLException{
Connection con=t.get();
if(con!=null){
con.close();
t.remove();//把副本对象从线程中去掉
}
}
}
3.dbutil框架应用?
首先按照三成架构的形式构建:
dao层的接口:
import java.lang.reflect.InvocationTargetException;
import java.sql.SQLException;
import java.util.List;
/**
* 针对数据库的数据的增删改查的功能做的接口
* @author ZY
*
*/
public interface IDaoSuperManager<T> {
/**
* 向数据库表里添加一条数据的方法
* @param t
* @throws SQLException
* @throws IllegalAccessException
* @throws IllegalArgumentException
*/
public int addItem(T t) throws SQLException, IllegalArgumentException, IllegalAccessException;
/**
* 从数据库表里删除一条数据的方法
* @param objId
*/
public int removeItem(Object objId) throws SQLException;
/**
* 更新数据库表里的一条字段的方法
* @param t
*/
public int updateItem(T t) throws SQLException;
/**
* 根据主键字段获取该条数据,并转换成实体对象
* @param objId
* @return
* @throws InvocationTargetException
* @throws IllegalArgumentException
* @throws IllegalAccessException
* @throws SecurityException
* @throws NoSuchMethodException
*/
public T getModel(Object objId) throws SQLException, NoSuchMethodException, SecurityException, IllegalAccessException, IllegalArgumentException, InvocationTargetException;
/**
* 根据查询条件获取多条数据,并转换成相应的集合
* @param objects
* @return
* @throws InvocationTargetException
* @throws IllegalArgumentException
* @throws IllegalAccessException
* @throws SecurityException
* @throws NoSuchMethodException
*/
public List<T> getList(T t) throws SQLException, NoSuchMethodException, SecurityException, IllegalAccessException, IllegalArgumentException, InvocationTargetException;
}
接口实现类dao.imp:
导入架包
csp0框架----------commons-dbutils-1.6-bin-----项目WebRoot----lib(如果没有加载到Web APP中点击右键选中包点击Build Path)
用户登记的道儿UserInfo:
import java.lang.reflect.InvocationTargetException;
import java.sql.Connection;
import java.sql.SQLException;
import java.util.List;
import javax.management.Query;
import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.handlers.BeanHandler;
import org.apache.commons.dbutils.handlers.BeanListHandler;
import com.gxa.bj.dao.IDaobudejie;
import com.gxa.bj.modle.UserInfo;
import com.gxa.bj.util.BeanUitl;
import com.gxa.bj.util.C3p0ConnectionHelper;
public class UserInfoDao implements IDaobudejie<UserInfo>{
QueryRunner queryRunner=new QueryRunner();
@Override
public int addItem(UserInfo t) throws IllegalArgumentException, IllegalAccessException, SQLException{
String sql=BeanUitl.getInsert(t);
Connection con=C3p0ConnectionHelper.getConnection();
int i=queryRunner.update(con,sql);
C3p0ConnectionHelper.closeConnection();
return i;
}
@Override
public int removeItem(Object objId) throws SQLException, IllegalArgumentException, IllegalAccessException {
UserInfo u=new UserInfo();
u.setUserId((Integer)objId);
String sql=BeanUitl.getDelete(u);
Connection con=C3p0ConnectionHelper.getConnection();
int i=queryRunner.update(con,sql);
C3p0ConnectionHelper.closeConnection();
return i;
}
@Override
public int updateItem(UserInfo t) throws SQLException, IllegalArgumentException, IllegalAccessException {
String sql=BeanUitl.getUpdate(t);
Connection con=C3p0ConnectionHelper.getConnection();
int i=queryRunner.update(con,sql);
C3p0ConnectionHelper.closeConnection();
return i;
}
@Override
public UserInfo getMolde(Object objId) throws SQLException, NoSuchMethodException, SecurityException, IllegalAccessException, IllegalArgumentException, InvocationTargetException {
UserInfo u=new UserInfo();
u.setUserId((Integer)objId);//得到用户编号
String sql=BeanUitl.getSelectSQL(u);
Connection con=C3p0ConnectionHelper.getConnection();
//查询返回实体对象
UserInfo u1= queryRunner.query(con,sql,new BeanHandler<UserInfo>(UserInfo.class));
C3p0ConnectionHelper.closeConnection();
return u1;
}
@Override
public List<UserInfo> getList(UserInfo t) throws SQLException, NoSuchMethodException, SecurityException, IllegalAccessException, IllegalArgumentException, InvocationTargetException {
String sql=BeanUitl.getSelectSQL(t);
Connection con=C3p0ConnectionHelper.getConnection();
//查询返回集合对象
List<UserInfo> list=queryRunner.query(con, sql,new BeanListHandler<UserInfo>(UserInfo.class));
C3p0ConnectionHelper.closeConnection();
return list;
}
}