重庆分公司,新征程启航

为企业提供网站建设、域名注册、服务器等服务

java事务代码示例 java代码加事务

java中的事务到底怎么理解举个实际的例子

比如说你去银行转账,将将 A 账户中的金额转到B账户。

创新互联建站主营台江网站建设的网络公司,主营网站建设方案,app软件开发,台江h5微信小程序定制开发搭建,台江网站营销推广欢迎台江等地区企业咨询

A 语句:update Table set amount = amount - 100 where id = 'A'"

B语句:update Table set amount = amount + 100 where id = 'B'"

会有两条update语句,如果不用事务处理的话,在A语句执行完之后,在执行B语句的时候出错,那么A账户的金额减少了,B账户的金额却没有增加,这就有问题了

所以要用到事务来控制,如果B语句出现错误,就将事务回滚,A账户的金额也不会减少。

如果A。B都执行成功,事务提交

简单来说就是所有在事务中的语句必须全部执行成功,事务才会提交,如果有一条执行失败,事务就会回滚。

java中怎么控制事务的一致性

Java中为了控制事务的一致性,会使用插入回滚点、callback方法,保证数据不被篡改,示例如下:

public String delete(String id) {

String ID = id;

 db = new getConnection();

 Connection con = db.getConnection();

 try {

con.setAutoCommit(false);

db.executeUpdate("delete from helloworld where ID=" + ID); //更新操作1

db.executeUpdate("delete from helloworld _book where ID=" + ID); //更新操作2

db.executeUpdate("delete from helloworld_user where ID=" + ID); //更新操作3

con点抗 mit();//提交JDBC事务

con.setAutoCommit(true);

db.close();

return “success”;

 }

 catch (Exception e) {

con.rollBack();//回滚JDBC事务

e.printStackTrace();

db.close();

return “fail”;

}

}

一个简单的Java程序代码?

package com.zpp;public class Charge {

public static void main(String [] args) {

if(args.length ==0) {

System.out.println("parameter error!");

System.out.println("java com.zpp.Charge [int]");

return;

}

int min = Integer.parseInt(args[0]);

double money = 0.0;

if (min = 0) {

money =0.0;

System.out.println("not money");

} else if (min = 60) {

money = 2.0;

} else {

money = 2.0 + (min - 60) * 0.01;

}

System.out.println("please pay: " + money);

}

} 编译:javac -d . Charge.java运行:java com.zpp.Charge 111

如何用java开启mysql事务,要求详细

如何用java开启mysql事务,要求详细

看你是什么事务,jdbc事务,还是分布式事务,还是容器事务

1,编程式事务管理(jdbc的事务是绑定在connection上的)

Connection conn = null;

try

{

Class.forName("com.mysql.jdbc.Driver");

conn = DriverManager.getConnection("jdbc:oracle:thin:@host:1521:SID","username","password");

conn.setAutoCommit(false); //取消自动提交

PreparedStatement ps = conn.prepareCall("update something");

ResultSet rs = ps.executeQuery();

conn点抗 mit(); //手动提交

}

catch (Exception e)

{

conn.rollback();

e.printStackTrace();

}

finally

{

conn.close();

}

2,声明式事务

先在工程的application.xml配置文件中添加如下代码,开启事务

!-- 声明式事务控制配置 --

tx:annotation-driven transaction-manager="txManager"/

bean id="txManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"

property name="datasource" ref="bassDataSource"/property

/bean

然后在你需要开启事务的接口前面添加注解

@Transactional(rollbackFor = IOException.class)

public void add(String name) throws IOException

{

System.out.println("可以再类里和方法里面添加事务注解0~0");

throw new IOException();

}

直接调用接口方法就好

分布式事务处理(mysql貌似在5.X之后才支持) 的话,

1.可以直接使用spring+atomikos框架进行管理

参考:

就不贴测试代码了,自己看着配置吧

2,使用JTA(Java Transaction API)进行分布式事务管理(测试代码如下)

import java.sql.Connection;

import java.sql.PreparedStatement;

import java.sql.SQLException;

import javax.naming.InitialContext;

import javax.sql.DataSource;

import javax.transaction.SystemException;

import javax.transaction.UserTransaction;

import com.mysql.jdbc.jdbc2.optional.MysqlDataSource;

//分布式事务处理

public class transferAccount

{

@SuppressWarnings("null")

public void testTransferAccount()

{

UserTransaction userts = null;

Connection connA = null;

PreparedStatement psA = null;

InitialContext context = null;

Connection connB = null;

PreparedStatement psB = null;

try

{

//获得事务管理对象

userts = (UserTransaction) context.lookup("java:comp/UserTransaction");

//获取两个数据库

connA = getDataSourceA().getConnection();

connB = getDataSourceB().getConnection();

//开启事务

userts.begin();

//sql语句

psA = connA.prepareStatement("我加1");

psB = connB.prepareStatement("我减1");

//执行sql

psA.executeUpdate();

psB.executeUpdate();

//事务提交

userts点抗 mit();

} catch (Exception e)

{

try

{

userts.rollback();

} catch (IllegalStateException | SecurityException

| SystemException e1)

{

e1.printStackTrace();

}

e.printStackTrace();

}

finally

{

try

{

psA.close();

psB.close();

connA.close();

connB.close();

} catch (SQLException e)

{

e.printStackTrace();

}

}

}

public DataSource getDataSourceA()

{

MysqlDataSource dataSource = new MysqlDataSource();

dataSource.setDatabaseName("mysql");

dataSource.setServerName("server");

dataSource.setPortNumber(1433);

dataSource.setUser("test");

dataSource.setPassword("test");

return dataSource;

}

public DataSource getDataSourceB()

{

MysqlDataSource dataSource = new MysqlDataSource();

dataSource.setDatabaseName("mysql");

dataSource.setServerName("server");

dataSource.setPortNumber(1435);

dataSource.setUser("test1");

dataSource.setPassword("test1");

return dataSource;

}

}


网站栏目:java事务代码示例 java代码加事务
当前URL:http://cqcxhl.cn/article/ddgsscd.html

其他资讯

在线咨询
服务热线
服务热线:028-86922220
TOP