使用开源C3p0+dbutils开发(小总结)

本文介绍如何使用C3P0连接池进行数据库操作,并结合DbUtils简化JDBC编程。通过实例展示了配置文件c3p0-config.xml的设置方法,包括Oracle和MySQL的连接配置。同时,提供了DAO层实现增删改查及模糊查询的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

c3p0是一个开源的连接池,实现了数据源和JNDI绑定,随时取用,平均每次取用只需要10-20毫秒,所以如果是很多客户端并发随机访问数据库的话,使用连接池的效率会高,至于DbUtils只是一个为简化JDBC操作的小类库,主要方法: 

public Object query():执行查询操作,至于里面的参数等具体的百度吧
public int update():用来执行一个更新(插入、更新或删除)操作。
以上是copy的。。。接下来干货

如果使用c3p0连接池必须引入:
c3p0包:c3p0-0.9.1.2.jar
dbutils包:commons-dbutils-1.6.jar
MySQL驱动包:mysql-connector-java-5.1.28-bin.jar
日志包:log4j-1.2.11.jar等你需要的包
具体如下
这里写图片描述

使用c3p0必须创建文件c3p0-config.xml里面写一些配置以下是我的通用的。。默认Oracle,如果用MySQL则写连接的时候指定

<c3p0-config>

<default-config>
    <property name="jdbcUrl">jdbc:oracle:thin:@localhost:1521:orcl</property>
    <property name="driverClass">oracle.jdbc.driver.OracleDriver</property>
    <property name="user">scott</property>
    <property name="password">scott</property>
    <property name="initialPoolSize">3</property>  
     <property name="maxIdleTime">30</property> 
     <property name="maxPoolSize">100</property> 
     <property name="minPoolSize">10</property> 
</default-config>

<named-config name="mysql"> 
<property name="jdbcUrl">jdbc:mysql://localhost:3306/person</property>
        <property name="driverClass">com.mysql.jdbc.Driver</property>
        <property name="user">root</property>
        <property name="password">root</property>
        <property name="initialPoolSize">3</property>  
        <!-- 连接的最大空闲时间  单位秒 默认是0-代表永远不会断开连接  超过设定时间的空闲连接将会断开 -->  
        <property name="maxIdleTime">30</property>  
        <!-- 连接池中拥有的最大连接数 默认值为15个 -->  
        <property name="maxPoolSize">20</property>  
        <!-- 连接池中保持的最小连接数  默认值为3个-->  
        <property name="minPoolSize">3</property>  
       <!-- 将连接池的连接数保持在minpoolsize 必须小于maxIdleTime设置  默认值为0代表不处理  单位秒 -->  
        <property name="maxIdleTimeExcessConnections">15</property>
</named-config>

</c3p0-config>

数据库连接部分: 指定数据源的语句:
ComboPooledDataSource dp = new ComboPooledDataSource(“mysql”);

写个main函是为了测试数据库连接是否正确,避免以后调试程序出现不应该出现的错误

package jdbc;

import org.apache.commons.dbutils.QueryRunner;

import com.mchange.v2.c3p0.ComboPooledDataSource;

public class jdbc {
    public static void main(String[] args) {
        System.out.print(jdbc.getQuery());
    }
    private static ComboPooledDataSource dp = new ComboPooledDataSource("mysql");


    public static QueryRunner getQuery(){
        return new QueryRunner(dp);
    }
}
``
Dao层:

package dao;
import java.util.List;
import jdbc.jdbc;
import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.handlers.BeanHandler;
import org.apache.commons.dbutils.handlers.BeanListHandler;
import value.person;

public class dao {
public static QueryRunner qr=jdbc.getQuery();
/**
* 增加操作
* @param p
* @return
*/
public boolean addperson(person p){
String sql=”insert into person(name,age,sex) values(?,?,?)”;
try{
int i = qr.update(sql,p.getName(),p.getAge(),p.getSex());
if(i==0){
return false;
}
}catch(Exception e){
e.printStackTrace();
}
return true;
}
/**
* 删除操作
* @param id
* @return
*/
public boolean delperson(int id){
String sql=”delete from person where id=?”;
try{
int i = qr.update(sql,id);
if(i==0){
return false;
}
}catch(Exception e){
e.printStackTrace();
}
return true;
}
/**
* 更新操作
* @param p
* @return
*/
public boolean alterperson(person p){
String sql=”update person set name=?,age=?,sex=? where id=?”;
try{
int i = qr.update(sql,p.getName(),p.getAge(),p.getSex(),p.getId());
if(i==0){
return false;
}
}catch(Exception e){
e.printStackTrace();
}
return true;
}
/**
* 按ID查找
* @param id
* @return
*/
public person getpersonByid(int id){

    String sql="select from person where id=?";
    person p=null;
    try{
        p = qr.query(sql,new BeanHandler<person>(person.class),id);

    }catch(Exception e){
        e.printStackTrace();
    }
    return p;
}
/**
 * 查找所有
 * @return
 */
public List<person> selectAllperson(){
    List<person> lp=null;
    String sql="select *from person ";
    try{
        lp=qr.query(sql, new BeanListHandler<person>(person.class));

    }catch(Exception e){
        e.printStackTrace();
    }
    return lp;
}
/**
 * 模糊查询
 * @param name
 * @param sex
 * @return
 */
public List<person> findBykey(String name,String sex) {
    List<person> lp=null;
    String sql="select *from person where name like ? and sex like ?";
    try{

        lp=qr.query(sql,new BeanListHandler<person>(person.class),"%"+name+"%","%"+sex+"%");

    }catch(Exception e){
        e.printStackTrace();
    }
    return lp;
}

}

servlet层:主要是截取url分发操作,随着使用框架多了,一些基本操作感觉生疏了,记一下嘎嘎

package servlet;

import java.io.IOException;
import java.util.List;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.json.JSONArray;

import value.person;
import dao.dao;

public class personServlet extends HttpServlet{

public static dao dao=new dao();
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp)
        throws ServletException, IOException {
    /*String m=req.getParameter("m");
    if("add".equals(m)){
        this.addperson(req, resp);
    }*/
    String url = req.getRequestURL().toString();
    if (url.endsWith("addperson")) {
        this.addperson(req, resp);
    }else if(url.endsWith("findBykey")){
        this.findBykey(req,resp);
    }else if(url.endsWith("selectAll")){
        this.selectAll(req,resp);
    }else if(url.endsWith("del")){
        this.del(req,resp);
    }
}

@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp)
        throws ServletException, IOException {
    this.doGet(req, resp);
}

protected void addperson(HttpServletRequest req, HttpServletResponse resp)
        throws ServletException, IOException {
        String name1=req.getParameter("name");  
        String age=req.getParameter("age");
        String sex=req.getParameter("sex");
        String name=new String (name1.getBytes("iso-8859-1"),"utf-8");

        person p=new person(name,Integer.valueOf(age),sex);
        dao.addperson(p);
        resp.getWriter().print("增加成功");
}

“`
基本上就是这些了 忘记了回来看看,嘎嘎嘎

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值