day18-事务与连接池 3.jdbc中事务操作介绍

那么我们都是通过程序操作数据库。所以要了解jdbc下怎样对事务操作。jdbc如何操作事务?

自动事务false那就不开了呗相当于开启事务。
package cn.itcast.transaction; import java.sql.Connection;
import java.sql.SQLException;
import java.sql.Statement; import cn.itcast.utils.JdbcUtils;
//代码加上事务了加上回滚了加上提交了 //jdbc中事务操作
public class TransactionTest1 {
public static void main(String[] args) throws SQLException { //修改id=2这个人的money=500;
String sql = "update account set money=500 where id=2";
Connection con = JdbcUtils.getConnection(); con.setAutoCommit(false);//开启事务,相当于start transaction; Statement st = con.createStatement();
st.executeUpdate(sql); //事务回滚
//con.rollback(); con.commit();//事务提交
st.close();
con.close();
}
}
package cn.itcast.transaction; import java.sql.Connection;
import java.sql.SQLException;
import java.sql.Statement; import cn.itcast.utils.JdbcUtils;
//代码加上事务了加上回滚了加上提交了 //jdbc中事务操作
public class TransactionTest2 {
public static void main(String[] args) { //修改id=2这个人的money=500;
String sql = "update account set money=500 where id=2"; //事务操作的异常不能说想抛就抛
Connection con = null;
Statement st = null; try {
//如果数据库操作过程中捕获异常了,
con = JdbcUtils.getConnection();
con.setAutoCommit(false);//开启事务,相当于start transaction;
st = con.createStatement();
st.executeUpdate(sql);
} catch (SQLException e) {
e.printStackTrace();
//事务回滚 有异常就把事务回滚,有异常就说明出问题了
//出问题就把数据恢复到原始,那就回滚吧
try {
con.rollback();
} catch (SQLException e1) {
e1.printStackTrace();
}
}finally{//finally里面的内容肯定是能执行到的
try {
con.commit();//事务提交
st.close();//资源关闭 释放资源操作
con.close();//资源关闭
} catch (SQLException e) {
e.printStackTrace();
} } }
}
package cn.itcast.utils; import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ResourceBundle; public class JdbcUtils { private static final String DRIVERCLASS;
private static final String URL;
private static final String USERNAME;
private static final String PASSWORD; private static final ThreadLocal<Connection> tl = new ThreadLocal<Connection>();
static {
DRIVERCLASS = ResourceBundle.getBundle("jdbc").getString("driverClass");
URL = ResourceBundle.getBundle("jdbc").getString("url");
USERNAME = ResourceBundle.getBundle("jdbc").getString("username");
PASSWORD = ResourceBundle.getBundle("jdbc").getString("password");
} static {
try {
// 将加载驱动操作,放置在静态代码块中.这样就保证了只加载一次.
Class.forName(DRIVERCLASS);
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
} public static Connection getConnection() throws SQLException {
Connection con = tl.get();// 从ThreadLocal中获取Connection。第一次获取得到的是null. if (con == null) {
// 2.获取连接
con = DriverManager.getConnection(URL, USERNAME, PASSWORD);
tl.set(con); // 将con装入到ThreadLocal中。
} // tl.remove(); //解除
return con;
} // 关闭操作
public static void closeConnection(Connection con) throws SQLException {
if (con != null) {
con.close();
}
} public static void closeStatement(Statement st) throws SQLException {
if (st != null) {
st.close();
}
} public static void closeResultSet(ResultSet rs) throws SQLException {
if (rs != null) {
rs.close();
}
}
}
day18-事务与连接池 3.jdbc中事务操作介绍的更多相关文章
- 一、DAO设计模式 二、DAO设计模式的优化 三、JDBC中的事务,连接池的使用
一.DAO设计模式概述###<1>概念 DAO,Data Access Object ,用于访问数据库的对象. 位于业务逻辑和数据持久化层之间,实现对数据持久化层的访问 ...
- 十三、事务、连接池 、ThreadLocal 、BaseServlet自定义Servlet父类 、 DBUtils à commons-dbutils
l 事务 l 连接池 l ThreadLocal l BaseServlet自定义Servlet父类(只要求会用,不要求会写) l DBUtils à commons-dbutils 事务 l 事务的 ...
- Spring整合JDBC(连接池、JDBC模板、Dao配置到Spring容器、配置文件的优化)
1.Spring整合JDBC (1)导包(共12个): c3p0连接池.JDBC驱动(4个) Spring-jdbc.Spring-tx事务(2个) (2)JDBC模板对象(JDBCTemplate) ...
- JDBC、事务和连接池
一:JDBC 1.什么是JDBC JDBC(Java Data Base Connectivity)SUN公司提供的一套操作数据库的标准规范.具体来讲是一种用于执行SQL语句的Java API,为多种 ...
- jdbc事务、连接池概念、c3p0、Driud、JDBC Template、DBUtils
JDBC 事务控制 什么是事务:一个包含多个步骤或者业务操作.如果这个业务或者多个步骤被事务管理,则这多个步骤要么同时成功,要么回滚(多个步骤同时执行失败),这多个步骤是一个整体,不可分割的. 操作: ...
- Java实战之04JavaWeb-05事务和连接池
一.事务部分 1.事务的简介 做一件事情,这个一件事情中有多个组成单元,这个多个组成单元要不同时成功,要不同时失败.A账户转给B账户钱,将A账户转出钱的操作与B账户转入钱的操作绑定到一个事务中,要不这 ...
- 03 事务,连接池DBCP,C3P0,DBUtils
事务 Transaction 其实指的一组操作,里面包含许多个单一的逻辑.只要有一个逻辑没有执行成功,那么都算失败. 所有的数据都回归到最初的状态(回滚) 事务的作用:为了确保逻辑的成功. 例子: ...
- 【转】【很全很新】C3P0 连接池和 DBUtils 配合事务使用总结
[转]https://blog.csdn.net/guozhaohui628/article/details/84793028 很久没用原生连接池,最近想写个小功能,结果发现很多地方不太懂,然后网上搜 ...
- day18 17.c3p0连接池使用
连接池时间长不用空闲着,dbcp是不回收的,性能可能有些问题.c3p0是可以自动回收.实际开发中c3p的生产力比dbcp强,性能上更强. package cn.itcast.datasource; i ...
随机推荐
- Windows 10 SDK 10.0.10158
昨天微软发布了Windows 10 SDK 10158版本: http://blogs.windows.com/buildingapps/2015/06/30/windows-10-sdk-previ ...
- CentOS7下Tomcat启动特别慢【有效解决】
多次亲测! 很简单,记录保存一下: 编辑 $JAVA_HOME/jre/lib/security/java.security 文件, 找到 securerandom.source=file:/dev/ ...
- Linux-挂载命令
1.查询与自动挂载 mount:查询系统中已挂载的设备 mount -a :依据配置文件.etc/fsatb的内容,自动挂载 2.挂在命令格式 mount [-t 文件系统] [-o 特殊选项] 设备 ...
- Ajax与后台的交互
Ajax Java 交互 jsp代码 <%@ page language="java" import="java.util.*" pageEncoding ...
- hdoj-1046-Gridland(规律题)
题目链接 #include <algorithm> #include <iostream> using namespace std; int main() { int t; c ...
- MySQL多种安装方式选择
1.rpm包安装方式 rpm包的安装方式非常简单,这里以el6平台下的mysql-5.6.34版本为例,首先,要通过上述搜狐镜像地址下载到如下四个MySQL相关软件安装包. a.下载安装包 MySQL ...
- BZOJ- 3142:数列 (数学)
题意:给出N,K,M,P.求有多少长度为K的序列A,满足:(1)首项为正整数:(2)递增数列:(3)相邻两项的差小于等于m:(4)最后一个数小于等于N. 思路:根据差分来算数量. #include&l ...
- 冒泡算法-bubble
冒泡算法在数据只有几个无序时是最快的算法,但是如果全部无序的话就变成了最慢的算法了,时间复杂度为O(n^2) public class bubbleSort { public static void ...
- git之reset
有时候,一直用公司电脑开发的时候,顺顺利利.回到家,用自己笔记本,想改改代码,git pull后,发现一堆的unmerged或者其他冲突等问题. 明明只是git pull 一下,怎么会这么多问题. 这 ...
- POJ1733:Parity game
浅谈并查集:https://www.cnblogs.com/AKMer/p/10360090.html 题目传送门:http://poj.org/problem?id=1733 带权并查集裸题.区间和 ...