JDBC:编写通用的 JDBCUtils工具类

基本上已经可以应付常用方法

1.为JDBCUtils 添加事务处理方法

2.处理多线程并发访问问题

package cn.cil.Utls;

import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import javax.sql.DataSource;
import com.mchange.v2.c3p0.ComboPooledDataSource;

/**
 * 编写通用的 JDBCUtils 工具类
 * @author Administrator
 *
 */

public class JDBCUtiles1 {

	/** 使用 c3p0 数据源 */

	private static DataSource dataSource = null;

	/** 使用ThreadLocal 解决多线程并发访问问题
	 * 	其中存放的是,事务处理相关的 Connection 对象*/
	private static ThreadLocal<Connection> locals = null;

	/** 创建对象 */
	static{
		dataSource = new ComboPooledDataSource("c3p0Config");
		locals = new ThreadLocal<>();
	}

	/**
	 * 获取 数据库连接
	 * @return
	 * @throws SQLException
	 */
	public static Connection getConnection() throws SQLException{

		// 获取当前线程对应的连接,也就是当前访问的数据库连接
		Connection conn = locals.get();
		// 如果为空,说明没有开启事务,则返回空闲 连接
		// 不为空,说明正在进行事务,所以必须是同一连接
		return (conn != null)?conn:dataSource.getConnection();
	}

	/**
	 * 开始事务
	 * @throws SQLException
	 */
	public static void beginStraction() throws SQLException{
		Connection conn = locals.get();
		//如果本次访问,已经开始事务了,却再次开始事务,即上次事务还没有进行完,又开始事务,则抛出
		if(conn != null)throw new SQLException("已经开始了事务");
		conn = getConnection();
		conn.setAutoCommit(false);
		locals.set(conn); //向 ThreadLocal 填充 数据库连接

	}

	/**
	 * 提交事务
	 * @throws SQLException
	 */
	public static void commitStraction() throws SQLException{
		Connection conn = locals.get();
		// 判断事务是否开始了,如果还没有开始事务,则不能提交
		if(conn == null)
			throw new SQLException("还没有开始事务");
		conn.commit();
		conn.close();
		locals.remove();//移走
	}

	/**
	 * 回滚事务
	 * @throws SQLException
	 */
	public static void rollbackStraction() throws SQLException{
		Connection conn = locals.get();
		if(conn == null)
			throw new SQLException("无法回滚事务");

		conn.rollback();
		conn.close();
		locals.remove();
	}

	/**
	 * 释放 连接,归还连接池
	 * @param connection
	 * @throws SQLException
	 */
	public static void release(Connection connection) throws SQLException{

		Connection conn = locals.get();
		if(conn == null){
			connection.close();
		}
		if(conn != connection){
			connection.close();
		}

	}
	/**
	 * 释放 连接,关闭结果集
	 * @param connection
	 * @throws SQLException
	 */
	public static void relase(Connection connection,ResultSet rs) throws SQLException{
		release(connection);
		if(rs != null){
			rs.close();
		}
	}

}
时间: 2024-08-08 05:36:07

JDBC:编写通用的 JDBCUtils工具类的相关文章

jdbc数据库连接之jdbcUtils工具类抽取

JDBC数据库连接1.准备数据库 初始化数据库和表:        CREATE DATABASE day07;        USE day07;                    create table category(            cid varchar(20) primary key,            cname varchar(20)        );                insert into category values('c001','电器'

JavaWeb基础之JdbcUtils工具类2.0

使用c3p0连接池来改版JdbcUtils工具 1. 使用c3p0连接池获取连接,使代码更加简单 1 /** 2 * 使用c3p0连接池做小工具 3 * JdbcUtils v2.0 4 * @author hui.zhang 5 * 6 */ 7 public class JdbcUtils { 8 // 配置文件的默认配置,必须给出c3p0-config.xml 9 private static ComboPooledDataSource dataSource = new ComboPool

JDBC【介绍JDBC、使用JDBC连接数据库、简单的工具类】

什么是JDBC JDBC全称为:Java Data Base Connectivity,它是可以执行SQL语句的Java API 为什么我们要用JDBC 市面上有非常多的数据库,本来我们是需要根据不同的数据库学习不同的API,sun公司为了简化这个操作,定义了JDBC API[接口] sun公司只是提供了JDBC API[接口],数据库厂商负责实现. 对于我们来说,操作数据库都是在JDBC API[接口]上,使用不同的数据库,只要用数据库厂商提供的数据库驱动程序即可 这大大简化了我们的学习成本

用Java编写的http下载工具类,包含下载进度回调

HttpDownloader.java package com.buyishi; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.net.URL; import java.net.URLConnection; public class HttpDownloader { private final String url, destFilename

JDBCUtils工具类

JdbcUtils.java 1 import java.sql.Connection; 2 import java.sql.SQLException; 3 4 import javax.sql.DataSource; 5 6 import com.mchange.v2.c3p0.ComboPooledDataSource; 7 /** 8 * 依赖: 9 * + c3p0-config.xml 10 * + c3p0-0.9.2-pre1.jar 11 * + mchange-commons-

基于durid的JDBCUtils工具类

1.JDBCUtils类 package com.alphajuns.utils; import com.alibaba.druid.pool.DruidDataSourceFactory; import javax.sql.DataSource; import java.io.IOException; import java.sql.Connection; import java.sql.ResultSet; import java.sql.SQLException; import java.

JDBCUtils工具类配置文件的读取方式

//第一种方式 Properties prop= new Properties();        //读取文件   通过类加载读取        InputStream is = JDBCUtils.class.getClassLoader().getResourceAsStream("data.properties");        prop.load(is);        String driverClass = prop.getProperty("driverCl

JDBCUtils工具类(转)

JdbcUtils.java import java.sql.Connection; import java.sql.SQLException; import javax.sql.DataSource; import com.mchange.v2.c3p0.ComboPooledDataSource; /** * 依赖: * + c3p0-config.xml * + c3p0-0.9.2-pre1.jar * + mchange-commons-0.2.jar * 版本1.3 * 更新日期:2

day17(JDBC入门&jdbcUtils工具介绍)

day17 JDBC整体思维导图 JDBC入门 导jar包:驱动! 加载驱动类:Class.forName("类名"); 给出url.username.password,其中url背下来! 使用DriverManager类来得到Connection对象! ? ? ? 1 什么是JDBC JDBC(Java DataBase Connectivity)就是Java数据库连接,说白了就是用Java语言来操作数据库.原来我们操作数据库是在控制台使用SQL语句来操作数据库,JDBC是用Java