jdbc 以及 事务的java类编写
package com.gaosheng.utils;
import java.sql.Connection;
import java.sql.SQLException;
import javax.sql.DataSource;
import com.mchange.v2.c3p0.ComboPooledDataSource;
public class JdbcUtil {
private static DataSource datasource = new ComboPooledDataSource(); //连接池对象
static ThreadLocal<Connection> t = new ThreadLocal();
private static Connection conn = null; //定义一个事务的专用连接
//获得连接池对象
public static DataSource getDatasource(){
return datasource;
}
//获得连接对象
public static Connection getConnection() throws SQLException{
conn = t.get();
if(conn == null) {
return datasource.getConnection();
}
return conn;
}
//开启事务方法
public static void beginTranscation() throws SQLException{
conn = t.get();
if(conn != null) {
throw new SQLException("事务已经开启,在没有结束当前事务时,不能再开启事务!");
}
conn = datasource.getConnection();
conn.setAutoCommit(false);
t.set(conn);
}
//提交事务的方法
public static void commitTransaction() throws SQLException{
conn = t.get();
if(conn == null) {
throw new SQLException("当前没有事务,所以不能提交事务!");
}
conn.commit();
conn.close();
//conn = null;
t.remove();
}
//回滚事物的方法
public static void rollbackTransaction() throws SQLException{
if(conn == null) {
throw new SQLException("当前没有事务,所以不能回滚事务!");
}
conn.rollback();
conn.close();
//conn = null;
t.remove();
}
}
package com.gaosheng.utils;
import java.sql.Connection;
import java.sql.SQLException;
import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.ResultSetHandler;
public class TxQueryRunner extends QueryRunner{
@Override
public int[] batch(String sql, Object[][] params) throws SQLException {
Connection conn = JdbcUtil.getConnection();
return super.batch(conn, sql, params);
}
@Override
public <T> T query(String sql, Object param, ResultSetHandler<T> rsh) throws SQLException {
Connection conn = JdbcUtil.getConnection();
return super.query(conn,sql, param, rsh);
}
/* (non-Javadoc)
* @see org.apache.commons.dbutils.QueryRunner#query(java.lang.String, java.lang.Object[], org.apache.commons.dbutils.ResultSetHandler)
*/
@Override
public <T> T query(String sql, Object[] params, ResultSetHandler<T> rsh) throws SQLException {
Connection conn = JdbcUtil.getConnection();
return super.query(conn,sql, params, rsh);
}
/* (non-Javadoc)
* @see org.apache.commons.dbutils.QueryRunner#query(java.lang.String, org.apache.commons.dbutils.ResultSetHandler, java.lang.Object[])
*/
@Override
public <T> T query(String sql, ResultSetHandler<T> rsh, Object... params) throws SQLException {
// TODO Auto-generated method stub
return super.query(sql, rsh, params);
}
/* (non-Javadoc)
* @see org.apache.commons.dbutils.QueryRunner#query(java.lang.String, org.apache.commons.dbutils.ResultSetHandler)
*/
@Override
public <T> T query(String sql, ResultSetHandler<T> rsh) throws SQLException {
// TODO Auto-generated method stub
return super.query(sql, rsh);
}
/* (non-Javadoc)
* @see org.apache.commons.dbutils.QueryRunner#update(java.lang.String)
*/
@Override
public int update(String sql) throws SQLException {
// TODO Auto-generated method stub
return super.update(sql);
}
/* (non-Javadoc)
* @see org.apache.commons.dbutils.QueryRunner#update(java.lang.String, java.lang.Object)
*/
@Override
public int update(String sql, Object param) throws SQLException {
// TODO Auto-generated method stub
return super.update(sql, param);
}
/* (non-Javadoc)
* @see org.apache.commons.dbutils.QueryRunner#update(java.lang.String, java.lang.Object[])
*/
@Override
public int update(String sql, Object... params) throws SQLException {
Connection conn = JdbcUtil.getConnection();
return super.update(conn,sql, params);
}
}
jdbc 以及 事务的java类编写的更多相关文章
- JDBC基础:JDBC快速入门,JDBC工具类,SQL注入攻击,JDBC管理事务
JDBC基础 重难点梳理 一.JDBC快速入门 1.jdbc的概念 JDBC(Java DataBase Connectivity:java数据库连接)是一种用于执行SQL语句的Java API,可以 ...
- 编写了几个Java类,但是一直运行某一个class,这种是因为:main方法写错
编写了几个Java类,但是一直运行某一个class,这种是因为:main方法写错
- 要创建一个EJB,必须要至少编写哪些Java类和接口?
要创建一个EJB,必须要至少编写哪些Java类和接口? A. 定义远程(或业务)接口 B. 定义本地接口 C. 定义Bean接口 D. 编写Bean的实现 解答:ABC
- Java初学者作业——编写 Java 程序,定义 Java 类 (Point) 用来表示坐标,坐标范围在(0,0)到(100,100)以内,并显示合法的坐标在控制台。
返回本章节 返回作业目录 需求说明: 编写 Java 程序,定义 Java 类 Point 用来表示坐标,坐标范围在(0,0)到(100,100)以内,并显示合法的坐标在控制台. 实现思路: 定义 P ...
- JDBC 4.0 开始Java操作数据库不用再使用 Class.forName加载驱动类了
JDBC 4.0 开始Java操作数据库不用再使用 Class.forName加载驱动类了 代码示例 转自 https://docs.oracle.com/javase/tutorial/jdbc/o ...
- 类的编写模板之简单Java类
简单Java类是初学java时的一个重要的类模型,一般由属性和getter.setter方法组成,该类不涉及复杂的逻辑运算,仅仅是作为数据的储存,同时该类一般都有明确的实物类型.如:定义一个雇员的类, ...
- Java -- JDBC 事务处理, 事务的隔离级别 脏读 不可重复读 等...
1. 事务指逻辑上的一组操作,组成这组操作的各个单元,要不全部成功,要不全部不成功. 数据库开启事务命令 •start transaction 开启事务 •Rollback 回滚事务 •Commit ...
- IDEA创建maven项目之后无法编写java类
在创建Maven web项目之后无法再java文件夹下面创建java类,这里我可以教一下大家 选择你的文件夹,鼠标点击右键,出现下图所显示的,你可以按照下图所显示的步骤进行操作
- [疯狂Java]JDBC:事务管理、中间点、批量更新
1. 数据库事务的概念: 1) 事务的目的就是为了保证数据库中数据的完整性. 2) 设想一个银行转账的过程,假设分两步,第一步是A的账户-1000,第二步是B的账户+1000.这两个动 ...
随机推荐
- python实现去掉空行
# coding = utf-8def clearBlankLine(): file1 = open('text1.txt', 'r', encoding='utf-8') # 要去掉空行的文件 fi ...
- 【Offer】[59-2] 【队列的最大值】
题目描述 思路分析 测试用例 Java代码 代码链接 题目描述 请定义一个队列并实现函数max得到队列里的最大值,要求函数max.push_back和 pop_front 的时间复杂度都是0(1). ...
- 8 分钟入门 K8s | 详解容器基本概念
作者| 阿里巴巴高级开发工程师 傅伟 一.容器与镜像 什么是容器? 在介绍容器的具体概念之前,先简单回顾一下操作系统是如何管理进程的. 首先,当我们登录到操作系统之后,可以通过 ps 等操作看到各式各 ...
- 6.final和static
一.final final修饰类表示该类为最终类,不可被继承. final修饰方法表示该方法为最终方法,不可被重写. final修饰属性表示该属性不可变,不可变有两种含义.当其修饰基本类型变量时表明其 ...
- Spring Boot 配置文件和命令行配置
Spring Boot 属于约定大于配置,就是说 Spring Boot 推荐不做配置,很多都是默认配置,但如果想要配置系统,使得软件符合业务定义,Spring Boot 可以通过多种方式进行配置. ...
- Docker Compose部署项目到容器-基于Tomcat和mysql的项目yml配置文件代码
场景 Docker-Compose简介与Ubuntu Server 上安装Compose: https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/deta ...
- 基于 VMware 的超融合, 解析 vSAN 与 SmartX ZBS 的优劣差异
在企业级IT领域从业多年,最近越来越多地听到圈内人谈论起超融合技术的种种好处.的确,超融合技术已越来越走向成熟,带来的价值也逐渐凸显.它可靠性高,资源消耗低,尤其是运维部署非常便捷.在企业基础架构领域 ...
- ckeditor中 config.js等通过ckeditor.js引入文件手动修改方法
因为除了ckeditor.js之外的引用文件是通过ckeditor.js自动添加<script>或<link>标签实现文件的引入,引入的根目录是展示页面的地址.有时需要手动修改 ...
- java反射机制,以及对反射机制的了解
反射是什么?反射有什么用?我相信大家在开始学的时候都会有疑惑,直到如今我学的还不够深入只能简单的说说反射的作用,理论的我也听得很迷糊,接下来我就以几个例子来 写写反射的用处: 494696003群,有 ...
- [AI] 深度数据 - Data
Data Engineering Data Pipeline Outline [DE] How to learn Big Data[了解大数据] [DE] Pipeline for Data Eng ...