【IT专家】数据库多表操作事务处理

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

本文由我司收集整编,推荐下载,如有疑问,请与我司联系

数据库多表操作事务处理

一、主要思路

在需要同时插入多条数据时,这其中可能是同一个表的多条记录,也可能是多

个不同表之间的数据同时更新。对此,我们需要保证其中的原子性和一致性,做到

要么全部操作都能全部成功完成,否则全部不操作。

我们可以通过SQL 的事务来对相关数据库操作进行处理,在开始conn.setAutoCommit(false);(conn 是或得的连接)把本次运行的SQL 操作改为非自

动运行,在配置好各SQL 语句之后,调用connmit();来运行,其中通过

try{……}catch……来捕捉异常,如果遇到错误时,就调用conn.rollback();来对本次

操作进行回滚到操作前的状态,防止存在错误数据和脏数据。

二、主要实现方法

/** * 批量插入对象-同一个表多条记录* p * 注意:对象字段不能为数据库

关键字* @param list * @return * @throws SQLException * @author lims * @date 2015-08-28 public int[] insertSameTable(List Pojo list) throws SQLException { if (list == null || list.size() == 0) { return null; String sql = getInsertSql(list.get(0)); PreparedStatement ps = null; String[] fields = null; int[] result = null; Connection conn=getConnection(); try { ps = conn.prepareStatement(sql.toString()); this.startTransaction(conn); for (Pojo obj : list) { Map String, String pojo_bean = obj.listInsertableFields(); fields = pojo_bean.keySet().toArray( new String[pojo_bean.size()]); for (int i = 0; i fields.length; i++) { ps.setObject(i + 1, pojo_bean.get(fields[i])); ps.addBatch(); result = ps.executeBatch(); thismitTransaction(conn); } catch(Exception e){ conn.rollback(); throw new RuntimeException(e); } finally { fields = null; org.apachemons.dbutils.DbUtils.closeQuietly(ps); this.closeConnection(conn); return result; * 批量插入对象-多表插入* p * 注意:对象字段不能为数据库关键字*

相关文档
最新文档