JdbcUtils 处理多线程并发访问问题 | 学习笔记

简介: 快速学习 JdbcUtils 处理多线程并发访问问题

开发者学堂课程【JDBC 数据库开发进阶JdbcUtils 处理多线程并发访问问题】学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址:https://developer.aliyun.com/learning/course/32/detail/694


JdbcUtils 处理多线程并发访问问题


内容简介:

相关代码


相关代码

package cn.itcast.jdbc;

import java.sql.connection;

public class JdbcUtils {

//配置文件的默认配置!要求你必须给出c3p0-config.xml! ! !

private static ComboPooledDataSource dataSource = new ComboPooledDataSource();

//它是事务专用连接!

private static connection con = null;

/**

使用连接池返回一个连接对象

*@return

*@throws SQLException

*/

public static Connection getConnection( ) throws sQLException {

//当con不等于null,说明已经调用过beginTransaction (),表示开启了事务!if( con != null) return con;

return datasource.getconnection ();

}

*使用连接池返回一个连接对象

*@return

*@throws SQLException

*/

public static connection getconnection() throws sQLException {

//当con不等于null,说明已经调用过beginTransaction ( ),表示开启了事务!

if ( con != null) return con;

return datasource.getConnection () ;

}

/**

*返回连接池对象!

*/return

*/

public static Datasource getDatasource () {

return datasource;

}

/**

*开启事务

*1.获取一个connection,设置它的setautoComnrnit (false)

*2.还要保证dao中使用的连接是我们刚刚创建的!

*--------------

*1.创建一个connection,设置为手动提交

*2.把这个connection给dao用!

*3.还要让conitTransaction或rollbackTransaction可以获取到!

*@throws sQLException

*/

public static void beginTransaction()throws sQLException {

if(con != null) throw new sQLException("已经开启了事务,就不要重复开启了!");

/*

*1.给con赋值!

*2.给con设置为手动提交!

*/

con = getconnection( ) ; //给con赋值,表示事务已经开始了con.setAutoCormit (false) ;

}

tl.set (con);//把兰刖线程的连接保仔起米!

}

/**

*提交事务

*1.获取beginTransaction提供的connection,然后调用commit方法/*@throws SQLException

*/

public static void commitTransaction() throws sQLException {

if(con == null) throw new SQLException ("还没有开启事务,不能提交! ");

/*

*1.直接使用con. commit ()

*/

con- commit ();

con.close ();

//把它设置为null,表示事务已经结束了!下次再去调用getConnection ()返回的就不是gon 了son.= null;

}

/**

*提交事务

*1.获取beginTransaction提供的connection,然后调用rollback方法

throws SQLException

*/

public static void rollbackTransaction () throws sQLException {

Connection con =  

if(con == null) throw new sQLException ("还没有开启事务,不能回滚!");

/*

*1.直接使用con.rollback ()

*/

Con.rollback ();

con.-close () ;

con= null;

}

/**

*释放连接

*@param connection

*@throws sQLException

*/

public static void releaseConnection(Connection connection) throws SQLException

Connection con = tl.get ();

/*

*判断它是不是事务专用,如果是,就不关闭!

*如果不是事务专用,那么就要关闭!

*/

//如果con == null,说明现在没有事务,那么connection一定不是事务专用的!

if(con ==null) connection.close () ;

//如果con != null,说明有事务,那么需要判断参数连接是否与con相等,若不等,说明参数连接不

if(con != connection) connection.close() ;

}

package cn.itcast.jdbc;

import java.sql.sQIException;

public class Demo1 {

private AccountDao dao = new AccountDao ( );

@Test

public void serviceMethod ( ) {

try {

JdbcUtils.beginTransaoction( ) ;

dao.update.("zs",-1.00);

if(true) throw new RuntimeException ( ;

dao.update(".ls"...100);

JdbcUtils.oommitTransaction ( ) ;

}catch(Exception e) {

try {

JdbcUtils. rollbackTransaction ( ) ;

catch isOLException e1) {

image.png

image.png

相关文章
|
2月前
|
并行计算 Java 数据处理
SpringBoot高级并发实践:自定义线程池与@Async异步调用深度解析
SpringBoot高级并发实践:自定义线程池与@Async异步调用深度解析
186 0
|
2月前
|
编解码 数据安全/隐私保护 计算机视觉
Opencv学习笔记(十):同步和异步(多线程)操作打开海康摄像头
如何使用OpenCV进行同步和异步操作来打开海康摄像头,并提供了相关的代码示例。
92 1
Opencv学习笔记(十):同步和异步(多线程)操作打开海康摄像头
|
1月前
|
安全
List并发线程安全问题
【10月更文挑战第21天】`List` 并发线程安全问题是多线程编程中一个非常重要的问题,需要我们认真对待和处理。只有通过不断地学习和实践,我们才能更好地掌握多线程编程的技巧和方法,提高程序的性能和稳定性。
142 59
|
10天前
|
安全 Java 开发者
Java 多线程并发控制:深入理解与实战应用
《Java多线程并发控制:深入理解与实战应用》一书详细解析了Java多线程编程的核心概念、并发控制技术及其实战技巧,适合Java开发者深入学习和实践参考。
|
22天前
|
存储 设计模式 分布式计算
Java中的多线程编程:并发与并行的深度解析####
在当今软件开发领域,多线程编程已成为提升应用性能、响应速度及资源利用率的关键手段之一。本文将深入探讨Java平台上的多线程机制,从基础概念到高级应用,全面解析并发与并行编程的核心理念、实现方式及其在实际项目中的应用策略。不同于常规摘要的简洁概述,本文旨在通过详尽的技术剖析,为读者构建一个系统化的多线程知识框架,辅以生动实例,让抽象概念具体化,复杂问题简单化。 ####
|
2月前
|
Java
【编程进阶知识】揭秘Java多线程:并发与顺序编程的奥秘
本文介绍了Java多线程编程的基础,通过对比顺序执行和并发执行的方式,展示了如何使用`run`方法和`start`方法来控制线程的执行模式。文章通过具体示例详细解析了两者的异同及应用场景,帮助读者更好地理解和运用多线程技术。
29 1
|
2月前
FFmpeg学习笔记(二):多线程rtsp推流和ffplay拉流操作,并储存为多路avi格式的视频
这篇博客主要介绍了如何使用FFmpeg进行多线程RTSP推流和ffplay拉流操作,以及如何将视频流保存为多路AVI格式的视频文件。
208 0
|
3月前
|
网络协议 C语言
C语言 网络编程(十四)并发的TCP服务端-以线程完成功能
这段代码实现了一个基于TCP协议的多线程服务器和客户端程序,服务器端通过为每个客户端创建独立的线程来处理并发请求,解决了粘包问题并支持不定长数据传输。服务器监听在IP地址`172.17.140.183`的`8080`端口上,接收客户端发来的数据,并将接收到的消息添加“-回传”后返回给客户端。客户端则可以循环输入并发送数据,同时接收服务器回传的信息。当输入“exit”时,客户端会结束与服务器的通信并关闭连接。
|
3月前
|
数据采集 消息中间件 并行计算
进程、线程与协程:并发执行的三种重要概念与应用
进程、线程与协程:并发执行的三种重要概念与应用
61 0
|
3月前
|
C语言
C语言 网络编程(九)并发的UDP服务端 以线程完成功能
这是一个基于UDP协议的客户端和服务端程序,其中服务端采用多线程并发处理客户端请求。客户端通过UDP向服务端发送登录请求,并根据登录结果与服务端的新子线程进行后续交互。服务端在主线程中接收客户端请求并创建新线程处理登录验证及后续通信,子线程创建新的套接字并与客户端进行数据交换。该程序展示了如何利用线程和UDP实现简单的并发服务器架构。