JDBC由浅入深解析(C3P0)(DBUtils)

1.自定义链接池

        首先是最不常用的连接池,但对于新手理解JDBC很友好的

        只需要在项目导入java和数据库链接的jar包即可,导入之后:

        1.首先定义一个文件夹,格式为XXX.properties

                在文件夹里写入连接信息,如:                        

                            driver=com.mysql.jdbc.Driver
                            url=jdbc:mysql://localhost:3306/exercise
                            username=root
                            password=***

            (exercise是当前数据库名称,剩下的除了账号密码之外都是确定的值)

        2.写一个java工具类,存放链接信息(这样以后直接调用这个类,省时省力)

                这个类中一点要写一个链接方法,一个释放方法,用以节约资源

import java.sql.*;
import java.util.ResourceBundle;

public class DBLink {
    private static String driver;
    private static String url ;
    private static String username;
    private static String password;
    static {
            ResourceBundle bundle = ResourceBundle.getBundle("db");    //Resource 类是读取那个文件的类(这里db是我.properties后缀文件的名字)
            driver= bundle.getString("driver");
            url=bundle.getString("url");
            username=bundle.getString("username");
            password=bundle.getString("password");
    }
    /**
     * 获得连接信息
     * @return
     */
    public static Connection getConnection(){
        Connection conn = null;
        try {
            Class.forName(driver);
            conn = DriverManager.getConnection(url,username,password);

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

    /**
     * 释放资源
     * @param conn
     * @param pstmt
     * @param rs
     */
    public static void release(Connection conn, PreparedStatement pstmt, ResultSet rs){
        if(rs!=null) {
            try {
                conn.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
        if(pstmt!=null) {
            try {
                pstmt.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
        if(conn!=null) {
            try {
                conn.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }

    }
}

        

        

2.C3P0连接池

    常用的连接池有C3P0,DBCP等连接池,由于我用C3P0所以对DBCP不做介绍

            首先还是导入c3p0的jar包,导入之后:

   1.需要写一个xml配置文件,模板像这样:

<?xml version="1.0" encoding="UTF-8"?>
<c3p0-config>

  <default-config>
    <property name="driverClass">com.mysql.jdbc.Driver</property>
	<property name="jdbcUrl">jdbc:mysql:///exercise</property>
	<property name="user">root</property>
	<property name="password">**</property>
	<property name="initialPoolSize">5</property>
	<property name="maxPoolSize">20</property>
  </default-config>
  
  <named-config name="MyDB">
    <property name="driverClass">com.mysql.jdbc.Driver</property>
	<property name="jdbcUrl">jdbc:mysql:///exercise</property>
	<property name="user">root</property>
	<property name="password">**Q</property>
  </named-config>
  

</c3p0-config>
解析:后面调用的话可以通过自拟名字(“MyDB”)来调用,如果不加参数的话则通过默认寻找
ComboPooledDataSource dataSource = new ComboPooledDataSource("MyDB");

在编写一个java类,用以连接SQL

import com.mchange.v2.c3p0.ComboPooledDataSource;

import javax.sql.DataSource;
import java.sql.Connection;
import java.sql.SQLException;

public class C3P0Utils {
    private static ComboPooledDataSource dataSource = new ComboPooledDataSource("MyDB");

    public static DataSource getDataSource(){
        return dataSource;
    }
    public static Connection getConnection(){
        try {
            return dataSource.getConnection();
        } catch (SQLException e) {
            throw new RuntimeException();
        }
    }
}

然后进行测试:

public class MyTest {
    @Test
    public void Text(){
        Connection conn = null;
        PreparedStatement pstmt = null;

        try{
            conn = C3P0Utils.getConnection();
            String sql = "insert into employee values(?,?,?,?,?);";
            pstmt = conn.prepareStatement(sql);
            pstmt.setInt(1,1006);
            pstmt.setString(2,"Zhuge");
            pstmt.setString(3,"m");
            pstmt.setString(4,"Social");
            pstmt.setInt(5,4564);
            int rows = pstmt.executeUpdate();
            if(rows>0)
                System.out.println("succeed");
            else
                System.out.println("defeat");
        }catch (Exception e){
            e.printStackTrace();
        }finally {
            DBLink.release(conn,pstmt,null);
        }

得到结果,返回成功:


3.DBUtils

                      

        DBUtils是自己练习是最方便的工具,其好用之处在于不用因为一点点修改而反复重写一个方法。

            在使用时首先还是要导包,之后:

        1.编写一个数据表类,要把这个类放在domain包下,这是约定。

        2.数据表类的具体实现方法是:编写各个字段的信息,设为private来保护;设置一个无参构造方法;每个字段信息添加set和get方法;

        3.编写test类:

        //QueryRunner是DBUtils的核心

 public void testQueryAllByMap(){

        try {
            QueryRunner qr = new QueryRunner((C3P0Utils.getDataSource()));//通过c3p0获取连接
            String sql = "select * from employee";
            List<Map<String,Object>> employees = qr.query(sql,new MapListHandler());//核心执行方法
            for (Map<String,Object> map:employees){
                System.out.println(map);
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }

qr.query()方法有多个重载,第一个参数是sql语句没差,但第二个表示用什么来接受返回值(注意有holder),(现在不是很懂,但要我来想的话有点类似于.net的ref参数)

此例中是用List(Map<>)来接受,这样就可以在程序中使用了

以下是常用的Handler:


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
比较实用,基础 目录 第一节 整理目的 3 第二节 jdbc的概念 3 2.1概念 3 2.2 Jdbc与应用程序的关系 3 2.3 数据库的连接步骤 4 2.4 Quick Start 4 第三节 如何与数据库建立连接 6 3.1 注册驱动 6 3.2 建立数据库的连接 8 3.3 规范Quick Start中的例子 10 第四节 Statement 接口的使用详解 12 4.1 Statement 的常用方法 12 4.2 CRUD操作 16 4.3 Statement有那些缺点 19 第五节 ResultSet接口的使用详解 20 第六节 JDBC 中数据类型详解 30 6.1 基本数据类型 30 6.2 日期类型 34 6.3 CLOB类型 36 6.4 BLOB类型 39 6.5 其他数据类型 41 第七节 DAO设计模式详解 41 7.1 实际项目中如何使用JDBC 41 7.2 DAO设计模式简介 42 7.3 DAO设计模式的实现 42 7.4 DAO设计模式与工厂模式的整合 49 7.5 DAO设计模式测试 52 第八节 JDBC对事务的支持 52 8.1 模拟转账 53 8.2 jdbc默认事务 54 8.3 事务提交与回滚 54 8.4 设置保存点 55 8.5 JTA事务的介绍 56 8.6 数据库的隔离级别介绍 56 8.6.1 未提交读 57 8.6.2 提交读 58 8.6.3 重复读 59 8.6.4 序列化读 60 8.7 小结 62 第九节 PreparedStatement接口的使用 62 第十节 CallableStatement接口的使用 62 9.1 无参无返回值存储过程调用 63 9.2 有参无返回值存储过程调用 63 9.3 有参有返回值存储过程调用 64 9.4 JDBC其他API 65 第十一节 元数据信息 66 11.1 数据库元数据信息 66 11.2 参数元数据信息 67 第十二节 批处理的使用 67 12.1 普通方式插入一千条数据 68 12.2 批处理方式插入一千条数据 69 第十三节 JDBC其他API 70 13.1 可滚动结果集 70 13.2 分页技术 72 13.3 可更新结果集 73 第十四节 编写一个简单的数据库连接池 74 14.1 为什么要使用数据库连接池 74 14.2 数据库连接池雏形 74 14.2 数据库连接池优化 77 14.2.1 对线程池加锁 77 14.2.2 连接不够用时抛出异常 77 14.3 数据库连接池之代理模式 78 14.3.1 静态代理 78 14.3.2 动态代理 84 14.4 DBCP数据库连接池的使用 87 第十五节 jdbc轻量级封装 88 15.1 将结果集封装为Map 88 15.1.1 ResultSetMetaData演示 88 15.1.2解决多行记录的问题 89 15.1.3 Map结果集的封装 90 15.2 将结果集封装为对象 91 15.2.1 user表POJO的编写 91 15.2.2 Bean结果集的封装 92 15.3 将结果集封装为List 94 15.4 策略模式的应用 96 15.4.1 Map结果集策略模式应用 96 15.4.2 Bean结果集策略模式应用 97 15.4.3 List结果集策略模式应用 98 15.4.4 单元测试 99 15.5 模板模式的应用 100 第十六节 近期推出 101
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值