java 数据事务处理 (必须在同一个连接,跨连接此方法无效,得用JPA)
2012-09-27 17:34
651 查看
package day18; import java.sql.ResultSet; import com.mysql.jdbc.Connection; import com.mysql.jdbc.PreparedStatement; import day17.DBManager; public class TestTrans { /** * @param args * @throws Exception */ public static void main(String[] args) throws Exception { //获取存入的金额和存款 double inbalance=3000;//request.getParameter("inbalance"); String accountid="12345678"; DBManager dbManager=null; Connection conn=null; PreparedStatement pstmt=null; ResultSet rs=null; //注册驱动 dbManager=new DBManager(); //获取连接 conn=dbManager.getConnection(); conn.getAutoCommit();//true 事务自动提交;false事务手动提交 System.out.println("conn.getAutoCommit()"+conn.getAutoCommit() ); //更改事务的提交方式*********** conn.setAutoCommit(false); //存款,插入存款信息表 //组织sql语句 String sqlInsert="insert into inaccount(accountid,inbalance) values (?,?)"; pstmt=(PreparedStatement) conn.prepareStatement(sqlInsert); pstmt.setString(1, accountid); pstmt.setDouble(2, inbalance); pstmt.executeUpdate(); //以账户为标准在账户基本信息表中查询余额 String sqlSelect="SELECT balance FROM account where accountid=?"; pstmt=(PreparedStatement) conn.prepareStatement(sqlSelect); pstmt.setString(1, accountid); rs=pstmt.executeQuery();//rs永远不为空 double balance=0; if(rs.next()){ balance=rs.getDouble(1); } //计算新的余额 balance=balance+inbalance; //模拟网络异常 int k=5/0; //更新账户基本信息表 String sqlUpdate ="update account set balance=? where accountid=?"; pstmt=(PreparedStatement) conn.prepareStatement(sqlUpdate); pstmt.setDouble(1, balance); pstmt.setString(2, accountid); pstmt.executeUpdate(); //使所有所有上一次的提交、回滚后进行的更改成为持久更改*********** conn.commit(); if(conn!=null){ conn.rollback();//取消当前事务的所有更改,并释放 //此Connection对象当前持有的数据库锁。该方法只应该在已禁用自动提交模式使用 } dbManager.closeResource(conn,pstmt,null); } }
相关文章推荐
- java连接FTPSERVER导致的错误处理方法
- 为什么Java反射对象必须有一个无参数的构造方法?
- java中处理http连接超时的方法
- 向记事本里写入数据、一个修改密码的判断方法(用记录本处理密码的方式)
- java学习:数据增删改查、存储过程调用及事务处理
- Nhibernate中的连接超时时事务回滚引发异常的处理方法
- sqlserver实例无法加锁或者多于一个的连接时处理方法
- [转载]C#中使用ADO.NET连接SQL Server数据库,自动增长字段用作主键,处理事务时的基本方法
- 4.构造方法与重载:定义一个网络用户类,要处理的信息有用户 ID、用户密码、 email 地址。在建立类的实例时把以上三个信息都作为构造函数的参数输入, 其中用户 ID 和用户密码时必须缺省时 ema
- 使用java调用C语言的方法,让java获取串口数据并生成一个String对象的代码。
- CXF webservice接口数据传输报错,ClientAbortException: java.io.IOException: 您的主机中的软件中止了一个已建立的连接
- 【Java】设计一个栈,并且push,pop和min三个方法的时间复杂度必须为O(1)
- java中处理http连接超时的方法
- java连接各大数据的方法
- JS 对java返回的json格式的数据处理方法
- 加锁问题,必须加锁在对象上或方法上,加在基本数据类型上无效
- Java连接MySQL因字符编码不统一导致数据无法正常响应交互解决方法
- c#连接access2003操作必须使用一个可更新的查询解决方法
- jQuery jqgrid 对含特殊字符json 数据的 Java 处理方法
- 一个java处理JSON格式数据的通用类