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

 

dbutils快速入门

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

一.前期准备html

    *导入jar包java

            ​,mysql

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

            

                ▶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工具类app

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实现增删改查ide

    *添加操做工具

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();
    }
相关文章
相关标签/搜索