DbUtils结合C3p0实现数据库的增删改查

本文介绍如何使用DbUtils结合C3P0进行数据库操作的封装,并演示增删改查的具体实现。

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

 

dbutils快速入门

    说明:本文非原生jdbc案例,通过DbUtils和C3p0实现对原生jsdc的简单封装。直接以案例开始

一.前期准备

    *导入jar包

            ​,

    *添加c3p0配置文件和jdbcutils工具类

            

                ▶c3p0-config.xml(文件名称不能改变,且默认必须放在src目录下)

     
<?xml version="1.0" encoding="UTF-8"?>
<c3p0-config>
    <!-- 默认配置,c3p0框架默认加载这段默认配置 -->
    <default-config>
        <!-- 配置JDBC 四个基本属性 -->
        <property name="driverClass">com.mysql.jdbc.Driver</property>
        <property name="jdbcUrl">jdbc:mysql:///learn</property>
        <property name="user">root</property>
        <property name="password">root</property>
    </default-config> <!-- This app is massive! -->
</c3p0-config>
View Code

                ▶jdbcutils工具类

package com.learn.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 JDBCUtils {
    //创建数据库连接池对象
    private static ComboPooledDataSource comboPooledDataSource = new ComboPooledDataSource();
    
    //获取连接的方法
    public static Connection getConnection() throws SQLException{
        return comboPooledDataSource.getConnection();
    }
    
    //提供数据库连接池对象的方法
    public static DataSource getDataSource(){
        return comboPooledDataSource;
    }
    //释放资源的方法
    public static void release(ResultSet rs, Statement stmt, Connection conn) {

        if (rs != null) {
            try {
                rs.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
            rs = null;
        }
        release(stmt, conn);
    }

    public static void release(Statement stmt, Connection conn) {
        if (stmt != null) {
            try {
                stmt.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
            stmt = null;
        }
        if (conn != null) {
            try {
                conn.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
            conn = null;
        }
    }
    
}
View Code

 

                ▶建表、建实体类(表与实体类字段相对应)

二.使用queryRunner实现增删改查

    *添加操作

QueryRunner runner = new QueryRunner(JDBCUtils.getDataSource());
    //DbUtils结合c3p0插入====================================================================
    String sql="insert into contect values(null,?,?,?,?)";
    try {
        int update = runner.update(sql,"王云","女","17601320125","孙敦");
        System.out.println(update);
    } catch (SQLException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }

 

    *修改操作

    //DbUtils结合c3p0修改=====================================================================
    String sql1 ="update contect set cname=? where id=?";
    try {
        int update = runner.update(sql1, "王云","1");
        System.out.println(update);
    } catch (SQLException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }

    *删除操作

   //DbUtils结合c3p0删除======================================================================
    String sql2="delete from contect where id=?";
    try {
        int update = runner.update(sql2, "1");
        System.out.println(update);
    } catch (SQLException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }

    *查询操作

           ▶ 自定义handler查询

                MyHandler

     public class MyHandler implements ResultSetHandler<List<Contect>>{

        @Override
        public List<Contect> handle(ResultSet rs) throws SQLException {
        //封装数据,数据从Resultset中获取
        ArrayList<Contect> list = new ArrayList<Contect>();
        while(rs.next()){
            Contect contect = new Contect();
            String name = rs.getString("cname");
            contect.setCname(name);
            String sex = rs.getString("sex");
            contect.setSex(sex);
            String tel = rs.getString("tel");
            contect.setTel(tel);
            String address = rs.getString("address");
            contect.setAddress(address);
            list.add(contect);
        }
        return list;
        }
            }

 

              查询   

 String sql3 ="select * from contect";
    try {
        List<Contect> contectList = runner.query(sql3, new MyHandler());
        System.out.println(contectList);
    } catch (SQLException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }

 

          ▶ResultSetHandler实现类介绍(由DBUtils框架给我们提供使用)实现类的学习方式:

                先测试,根据测试结果总结当前实现类的按照什么样的方式封装数据(策略)

            ArrayListHandler       

  String sql4 ="select * from contect";
    try {
    List<Object[]> list = runner.query(sql4, new ArrayListHandler());
        for (Object[] objects : list) {
            for (Object object : objects) {
                System.out.println(object);
            }
            System.out.println("------------------------------------");
        }
    } catch (SQLException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }

 

 

            BeanHandler

      String sql5 ="select * from contect where id=3";
    try {
    Contect contect = runner.query(sql5, new BeanHandler<Contect>(Contect.class));
        System.out.println(contect);
    } catch (SQLException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }

 

            BeanListHandler

 String sql6 ="select * from contect where id=? ";
    try {
        List<Contect> list = runner.query(sql6, new BeanListHandler<Contect>(Contect.class),"2");
        System.out.println(list);
    } catch (SQLException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }

 

             ScalarHandler

 String sql6 ="select * from contect  ";
    try {
        Object object = runner.query(sql6,new ScalarHandler() );
        System.out.println(object);
    } catch (SQLException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }

 

 

 

 

                    

 

转载于:https://www.cnblogs.com/xuww-blog/p/9389142.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值