`

(九) 事务

 
阅读更多

可以将一组语句构建成一个事务(transaction),当所有语句顺利执行之后,事务可以被提交(commit),否则事务将被回滚(rollback);
使用事务的原因:保持数据库完整性(database integrity)
默认情况下数据库连接处于自动提交模式(autocommit mode),每个SQL命令一旦被执行便提交给数据库,一旦提交就无法回滚,在使用事务时,需要关闭这个默认值。
关闭自动提交模式 : conn.setAutoCommit(false);
提交事务 : conn.commit();
回滚 : conn.rollback();
1.保存点(Save Point)

在使用某些驱动程序时,使用保存点(Save Point)可以更好地控制回滚操作,创建一个保持点意味着稍后只需返回到这个点,而非事务开头。
e.g.  保持点的使用,建立、返回和释放

      Statement stmt = conn.createStatement();  //开始事务,rollback()将回到该点
      stmt.executeUpdate(command1);
      Savepoint savepoint = conn.setSavepoint();//设置保存点,rollback(savepoint)将回到该点
      stmt.executeUpdate(command2);
      if(...){
        conn.rollback(savepoint);               //回到保持点,相当于不执行command2
      }
      conn.commit();
      conn.releaseSavepoint(savepoint)          //当不再需要保存点时,必须释放它

注意:保存点只能保存DML语言,即UPDATE更新、INSERT插入、DELETE删除。 

 

2.批量更新(batch update)
假设有一个程序需要执行许多insert语句,以便将数据填入数据库表中,可以使用批量更新的方法来提高程序性能。
在使用批量更新(batch update)时,一个命令序列作为一批操作将同时被收集和提交。
注意:
(1)使用DatabaseMetaData类中的supportsBatchUpdate方法可以获知数据库是否支持这种特性。
(2)处于同一批中的容器可以是INSERT、UPDATE和DELETE等操作,也可以是数据库定义命令,如CREATE TABLE和DROP TABLE。但是批量处理中添加SELECT命令会抛出异常。(从概念上讲,批量处理中的SELECT语句没有意义,因为它会返回结果集,而不是更新数据 库)
(3)应该调用addBatch(sql)方法,而非executeUpdate方法。
(4)为了在批量模式下正确的处理错误,必须将批量执行的操作视为事务,如果批量更新在执行过程中失败,那么必须将它回滚到批量操作开始之前的状态。

e.g.通过批量更新建表及添加数据

      boolean autoCommitState = conn.getAutoCommit();
      conn.setAutoCommit(false);
      Statement stmt = conn.createStatement();
      String command = "CREATE TABLE ...";
      stmt.addBatch(command);
      while(...){
        command = "INSERT INTO ... VALUES(...)";
        stat.addBatch(command);
      }
      int[] counts = stmt.executeBatch();//包含批中每个命令的一个元素的更新计数所组成的数组。
      conn.setAutoCommit(autoCommitState)

 

3.高级SQL类型

    SQL数据类型及其对应的Java类型

 

SQL数据类型                               Java数据类型
INTEGER或INT                                int
SMALLINT                                    short
NUMERIC(m,n),DECIMAL(m,n),DEC(m,n)          java.math.BigDecimal
FLOAT(n)                                    double
REAL                                        float
DOUBLE                                      double
CHARACTER(n)或CHAR(n)                       String
VARCHAR(n),LONGVARCHAR                      String
BOOLEAN                                     boolean
DATE                                        java.sql.Date
TIME                                        java.sql.Time
TIMESTAMP                                   java.sql.Timestamp
BLOB                                        java.sql.Blob
CLOB                                        java.sql.Clob
ARRAY                                       java.sql.Array
ROWID                                       java.sql.RowId
NCHAR(n),NVARCHAR(n),LONG NVARCHAR(n)       String
NCLOB                                       java.sql.NClob

 

 

 

(1)SQL ARRAY(SQL数组)是值的序列,在Oracle中为关键字

(2)从数据库中获取一个BLOB或数组并不等于获取了它的实际内容,只有在访问具体的值时,它们才会从数据库中读取出来,目的是改善性能,因为通常这些数据的数据量都非常大。

(3)某些数据库支持ROWID值,JDBC 4引入了java.sql.RowId接口,并提供了用于在查询时中提供行ID,以及从结果中获取该值的方法。Oracle中为关键字。

(4)NCHAR及其变体为国家属性字符串,按照本地字符编码机制存储字符串,并使用本地排序惯例对这些字符串进行排序。JDBC 4提供了方法,用于在查询和结果中进行Java的String对象和国家属性字符串之间的双向转换。

(5)有些数据库可以存储用户自定义的结构化类型,JDBC 3提供了一种机制用于将SQL结构化类型自动映射成Java对象。

(6)有些数据库提供用于XML数据的本地存储。JDBC 4引入了SQLXML接口,它可以在内部XML表示和DOM的Source/Result接口或二进制流之间起到中介作用。

分享到:
评论

相关推荐

    事务的使用方法

    ### 事务的使用方法 #### 一、引言 在软件开发中,特别是在涉及数据库操作的应用程序中,事务处理是一项非常重要的技术。它确保了一系列的操作要么全部成功完成,要么全部失败回滚,从而保持了数据的一致性和完整...

    分布式事务

    #### 九、结论 分布式事务是现代计算环境中不可或缺的一部分,尤其是在高度分散的应用架构中。Oracle 提供了多种工具和技术来支持分布式事务的管理和优化,包括 Oracle 控制的分布式事务和基于 XA 的分布式事务。在...

    从零开始学iOS7开发系列教程-事务管理软件开发实战

    最后,第九章可能是一个综合性的实战项目,即开发事务管理软件。这将整合前面所有章节的知识,如创建UI、处理用户输入、数据存储和网络通信。这个项目会让你亲手实现一个可以记录、跟踪和提醒日常事务的应用。 通过...

    mysql分布式事务实现 MySQL XA pdf

    #### 九、总结 本文详细介绍了MySQL如何通过XA协议实现分布式事务处理。分布式事务处理对于现代分布式系统来说至关重要,尤其是在需要跨多个数据库实例进行操作的情况下。通过使用X/Open DTP模型和XA接口,MySQL能够...

    上海市高新技术企业认定专项审计事务所名单终稿.pdf

    上海市高新技术企业认定专项审计事务所名单...知识点九:高新技术企业认定的未来发展 高新技术企业认定的未来发展前景非常广阔。随着高新技术企业的不断发展和完善,高新技术企业认定的标准和要求也将不断提高和改进。

    Spring学习笔记之九--声明式事务

    编程式事务管理需要开发者显式地调用begin、commit、rollback等方法来控制事务,而声明式事务管理则更加便捷,它允许开发者通过配置或注解来声明事务的边界,使得事务管理与业务逻辑分离。 声明式事务主要依赖于...

    律师事务所收费管理制度.pdf

    九、成本分摊:如鉴定费、翻译费等相关费用,由律师事务所凭单据向委托人报销,明确了成本负担的责任。 十、收费减免政策:针对特定情况,如涉及国家利益、当事人经济困难或无力负担费用等,律师事务所有权酌情减免...

    关于在事务所实习报告九篇.doc

    关于在事务所实习报告的内容,主要涉及实习生在税务师事务所的工作经历和所学到的知识。这篇报告详细介绍了实习生在某税务师事务所的实习经历,包括选择实习的时间和机构的原因、事务所的基本情况、实习期间的职责和...

    律师事务所实习人员管理制度.pdf

    第九,如果实习人员违反规章制度,将面临批评甚至解除实习合同的处罚。严重违规行为如违反《律师法》、部颁规章或职业道德,将上报上级司法行政机关处理。如果实习人员的行为导致事务所或当事人受损,他们须承担赔偿...

    第6章 办公事务管理系统(C#)

    九、XML与JSON数据交换 XML和JSON是常见的数据交换格式,常用于前后端通信。C#提供了System.Xml和System.Json命名空间,方便对这两种格式的数据进行序列化和反序列化。 十、单元测试与调试 为了确保系统的稳定性...

    会计师事务所特殊普通合伙协议书范本.doc

    第九章争议解决及其他条款,规定了如何处理事务所内部或与第三方的纠纷,以及可能的法律适用和管辖权问题。 这份协议书不仅是事务所日常运营的法律基础,也是预防和解决潜在问题的工具。它强调了合伙人之间的公平...

    会计师事务所职业道德规范守则.doc

    第四条提出执行业务时需遵循独立、客观公正的原则,第五条要求从业人员保持正直、诚实并公正处理事务,第六条强调应有的关注和职业谨慎,第七条强调专业胜任能力和持续学习,第八条要求保密,第九条禁止有损职业声誉...

    事务所实习报告汇编九篇.docx

    ### 事务所实习报告知识点汇总 #### 一、实习背景及目标 - **实习单位**:浙江永德会计事务所 - **实习目的**:通过实习了解会计师事务所的机构组成、人员职责、基本业务等内容;熟悉事务所的审计业务流程、行业...

    律师事务所实习日记【九篇】 .doc

    律师事务所实习日记【九篇】 .doc

    ABC会计师事务所首次接受委托.pdf

    9. **宣传材料的真实性和客观性**:第九种情况,ABC会计师事务所散发的手册可能过于美化自身能力,违反了不得进行误导性宣传的职业道德要求。 10. **合作与保密**:第十种情况,与信贷评审部的合作可能导致客户信息...

    Java进阶-连接池&事务(九).zip

    在Java编程领域,连接池和事务管理是两个非常重要的概念,尤其对于开发高效、稳定的企业级应用程序至关重要。本文将深入探讨这两个主题,并结合Dbutils工具库进行讲解。 首先,我们来了解一下连接池。连接池是一种...

    在事务所实习报告集合九篇.doc

    2. 会计师事务所简介:BDO立信会计师事务所(特殊普通合伙)福建分所是立信会计师事务所的成员所,提供审计、税务、咨询等多种服务。其组织架构清晰,包括首席合伙人、合伙人、高级项目经理、项目经理、高级审计员、...

    关于在事务所实习报告九篇.docx

    关于在事务所实习的经历,尤其是税务事务所,可以学习到许多实际的税务知识和会计操作。实习报告中提及的实习地点是xx市xx税务师事务所,这是一家专业的税务代理机构,提供税务咨询、代理、纳税审查等服务,且与...

    会计师 事务所 管理系统

    #### 九、使用环境 1. **基于Web浏览器**:无需安装客户端,通过浏览器即可访问。 2. **微信服务号对接**:与企业微信服务号对接,实现数据共享。 3. **云服务器或本地部署**:既可以选择免费使用云服务器,也可以...

    Java进阶-连接池&Dbutils&事务(九).zip

    Java进阶-连接池&Dbutils&事务(九).zip

Global site tag (gtag.js) - Google Analytics