JAVA概述
第一部分:java入门基础
第二部分:java常用类
第三部分:jdbc系列教程
第四部分:java高级特征
java8新特征详解
java文件操作专题教程

知识点

相关文章

更多

最近更新

更多

JDBC系列教程之八:事务-ACID

2019-02-28 23:18|来源: 领悟书生

事务-ACID

l  原子性(atomicity):组成事务处理的语句形成了一个逻辑单元,不能只执行其中的一部分。

l  一致性(consistency):在事务处理执行前后,数据库是一致的(数据库数据完整性约束)。

l  隔离性(isolcation):一个事务处理对另一个事务处理的影响。

l  持续性(durability):事务处理的效果能够被永久保存下来 。

l  connection.setAutoCommit(false);//打开事务。

l  connection.commit();//提交事务。

l  connection.rollback();//回滚事务。

TxTest.java

package com.hyneng.jdbc;

import java.sql.Connection;

import java.sql.ResultSet;

import java.sql.SQLException;

import java.sql.Statement;

/**

* 2010-10-07

* @author HuangYineng

*/

public class TxTest {

   public static void main(String[] args) throws  SQLException {

      test();

   }

   static void test() throws  SQLException {

      Connection conn = null;

      Statement st = null;

      ResultSet rs = null;

      try {

          conn = JdbcUtils.getConnection();

          //关闭自动提交

          conn.setAutoCommit(false);

          conn.setTransactionIsolation(Connection.TRANSACTION_READ_COMMITTED);

         

          st = conn.createStatement();

          String sql = "update user set money=money-10 where id=1";

          st.executeUpdate(sql);

          sql = "select money from user where id=2";

          rs = st.executeQuery(sql);

          float money = 0.0f;

          if (rs.next()) {

             money = rs.getFloat("money");

          }

          if (money > 400)

             throw new RuntimeException("已经超过最大值!");

          sql = "update user set money=money+10 where id=2";

          st.executeUpdate(sql);

          //手动提交

          conn.commit();

      } catch (SQLException e) {

          if (conn != null)

             //出现异常,回滚

             conn.rollback();

          throw e;

      } finally {

          JdbcUtils.free(rs, st,  conn);

      }

   }

}


本文链接:JDBC系列教程之八:事务-ACID,转自请注明:http://www.656463.com/article/802

相关问答

更多
  • WDCP 隐藏Nginx版本号教程各大门户都隐藏nginx的版本号 他们如此做必有道理所以我们也学习吧总共两步!第一步:先到 /www/wdlinux/nginx-1.4.1(我升级了版本)/conf 下 找到 nginx.conf 文件然后打开找到 tcp_nodelay on;在下面那一行添加 server_tokens off; 即可如:keepalive_timeout60; tcp_nodelay on;server_tokens off;这样就行了 (高手别笑,教程本来就是要方便简便)第二步:如 ...
  • ANSI标准定义了4个隔离级别标准: •READ UNCOMMITTED:最低级别的隔离,通常又称为dirty read,它允许一个事务读取还没commit的数据,这样可能会提高性能,但是dirty read可能不是我们想要的。 •READ COMMITTED:在一个事务中只允许已经commit的记录可见。如果session中select还在查询中,另一session此时insert一条记录,当前事务可以看到修改的记录,从而产生不可重复读取和幻像数据。 •REPEATABLE READ:在一个事务开始后,其 ...
  • ACID是您在修改数据库时要应用的一组属性。 原子性 一致性 隔离 耐久力 事务是一组相关的更改,用于实现一些ACID属性。 事务是实现ACID属性的工具。 原子性意味着您可以保证所有的事务发生,或者没有一个; 您可以将复杂的操作作为一个单一的单元,全部或全部,崩溃,电源故障,错误或其他任何事情都将不允许您处于只有一些相关更改发生的状态。 一致性意味着您保证您的数据一致; 您对相关数据的约束不会受到任何侵犯。 隔离意味着一个事务无法从尚未完成的另一个事务中读取数据。 如果两个事务同时执行,那么每个事务将按顺 ...
  • 事务完整性的ACID原则由数据库而不是由API(如JDBC)或由应用程序来实现。 您的应用程序的责任是选择一个数据库和一个数据库配置,以支持您所需的任何事务完整性,并正确识别应用程序中的事务边界。 当引发异常时,应用程序必须确定是否适合回滚整个事务或继续进行其他处理。 如果您的应用程序正在处理来自供应商的订单(例如处理成功的99个订单并记录失败的1个订单供用户调查),这可能是适当的。 另一方面,由于1次失败,您可能会拒绝全部100个订单。 这取决于你的应用程序在做什么。 一般而言,您一次只能打开一个事务(或 ...
  • write(2)调用应该是Linux下的原子 。 这意味着只要您编写单个缓冲区,就可以确定读者不会读取不完整的记录。 您可能希望使用os.write来确保没有您不知道的缓冲/分块。 如果正在进行读取并且文件已更新,那么读取是否会在文件中间使用新数据,或者以某种方式知道如何从旧文件中获取数据(如何)? 如果只有一个read(2)和一个write(2) ,则可以保证看到一致的结果。 如果将写入分成两部分,则可能会发生写入第一部分,读取然后写入第二部分,这将是原子性违规。 如果您需要编写多个缓冲区,请自行组合或使 ...
  • 参与事务的所有端点本质上都是同步的。 是标准交易是好的,如果它们都使用相同的connector 。 你可以使用:
    不确定你在问什么,但是,如文档中所述,mongodb中没有多文档事务。 所以答案是:“你不能做任何多文档交易”。 您的客户端技术无关紧要。 Not sure what you are asking, but, as stated in the documentation, there are no multi-document transactions in mongodb. So the answer is: "you can't do any multi-document transactions". ...
  • 您的一致性要求是什么? 如果关于Mongo的临时报告并不总是完全是最新的,那还可以吗? 如果不是,那么我认为你很难过。 如果是,那么我想我会选择一些事务性MSMQ和SQL Server,然后设置一个(或多个)服务来通过处理来自队列的消息来更新Mongo。 What are your consistency requirements? Is it ok if ad-hoc reporting on the Mongo is not always entirely up-to-date? If no, then ...
  • 一旦你将十进制模块放在适当的位置并且你可以在arangod中正确地要求它,你应该能够在这样的事务中使用它: db._executeTransaction({ collections: { }, action: function (params) { var Decimal = require("decimal"); return Decimal(params.foo).add(params.bar).toNumber(); }, params: { fo ...