分享

JdbcUtils工具类

 若生安饶 2023-08-28 发布于河南

package utils;

import java.io.IOException;

import java.io.InputStream;

import java.sql.Connection;

import java.sql.DriverManager;

import java.sql.PreparedStatement;

import java.sql.ResultSet;

import java.sql.SQLException;

import java.util.Properties;

import javax.sql.DataSource;

import org.apache.commons.dbcp2.BasicDataSourceFactory;

public class JdbcUtils {

    static InputStream is = null;

    //配置文件的操作类Properties类(java.util.Properties)

    static Properties properties = new Properties();

    static DataSource pool = null;

    //会话:登录系统后,可以进行多个操作,但只登录了一次

    //事务:每个操作,如第一次转账和第二次转账是两个事务

    //线程:一个人操作和多个人操作的问题

    //一个会话可以创建多个事务,一个事务只能由一个会话产生

    //一个事务可以产生多个线程,一个线程同一时间内只能由一个事务执行

    //创建事务,类之间互调属于同一个线程,为同一个线程保存同一个连接值conn,为不同线程保存不同的连接值

    //泛型里面可以放任意对象,用事务保存什么就放什么类型

    static ThreadLocal<Connection> tdl = new ThreadLocal<Connection>();

    //创建连接池,并将dbcp.properties以键值对的形式读入

    static {

        //这个try是为createDataSource捕获的异常

        try {

            //JDBCUtils.class为JDBCUtils的字节码文件

            //当前class的包路径为基准,获取dbcp.properties文件的流

            is = JdbcUtils.class.getResourceAsStream("/dbcp.properties");

            //从输入流中以键值对的形式读取dbcp.propertie,要捕捉异常

            try {

                properties.load(is);

            } catch (IOException e) {

                e.printStackTrace();

            }

            //使用BasicDataSourceFactory数据连接池工厂类创建一个连接池

            //并将从dbcp.propertie读取出的键值对放入连接池中

            pool = BasicDataSourceFactory.createDataSource(properties);

        } catch (Exception e) {

            e.printStackTrace();

        } finally {

            try {

                //关闭流文件,捕获异常

                is.close();

            } catch (IOException e) {

                e.printStackTrace();

            }

        }

    }

    //获取连接

    public static Connection getConnection() throws Exception {

        //获取当前线程中拥有的连接,如果没有就创建一个

        Connection conn = tdl.get();

        if (conn == null) {

            //从连接池中取值,并将连接加入当前线程中

            conn = pool.getConnection();

            tdl.set(conn);

        }

        return conn;

    }

    //释放资源

    //导包导的都是有关sql的包

    public static void release(ResultSet rs, PreparedStatement pstm, Connection conn) throws Exception {

        if (rs != null) {

            rs.close();

        }

        if (pstm != null) {

            pstm.close();

        }

        //关闭连接,同时将连接从当前线程中移除

        if (conn != null) {

            conn.close();

            tdl.remove();

        }

    }

}



配置文件 dbcp.properties

driverClassName=com.mysql.jdbc.Driver

url=jdbc:mysql://127.0.0.1:3306/mysql?serverTimezone=GMT%2B8

username=root

password=root

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多