conn.setAutoCommit(true)和(false)的区别
true:sql命令的提交(commit)由驱动程序负责
false:sql命令的提交由应用程序负责,程序必须调用commit或者rollback方法
conn.setAutoCommit()介绍及作用
2009-07-21 01:46 337人阅读 评论(1) 收藏 举报
事务操作数据:
(一)
eg:
假如银行转账系统
从张三的账户转1000元到小罗的账户
这个操作需要分两步
1.张三账户减少1000元
2.小罗账户增加1000元
假如于到断电等等,而刚好张三减了500,而此时小罗却不增加。。。。可以想象银行这下有事做了
所以使用事务操作数据来搞定
(2)
java使用事务非常简单,首先调用conn.setAutoCommit(boolean b)方法,传入一个false,这样将不会自动提交,而需要使用conn.commit()方法,手动提交事务,当然只有在确认两个步骤都没有出错的情况下,才能提交,这样才能保证整个操作的完整性,一旦出错,使用conn.rollback()方法,回滚事务,这样的话,整个事务都将不被提交。那么如何判断有没有出错呢,非常简单,执行数据库操作的方法,都会抛出java.sql.SQLException,所以需要使用try……catch语句块捕获异常,在catch块中,使用conn.rollback()回滚事务即可
在数据库调用的javabean中conn.setAutoCommit()的功能是每执行一条SQL语句,就作为一次事务提交。但一般在项目中很有可能需要执行多条SQL语句作为一个事务。若有一个执行不成功,就会rollback();
一般来讲,大家对数据库中的表单,主要是增、删、改、查 这四个操作,如果你的程序当中,遇到一次业务逻辑需要两次或两次以上的对相同数据表的增删改操作,那么,为了数据的一致性,(或者具体说,在你的一次业务逻辑的处理过程中,其他(线程或程序或业务处理)的对相同数据的相同两次查询所得结果相同。)我们会利用数据库的事务操作,将一次业务逻辑所包含的所有操作封装在一个事务里,一次将多个操作进行提交。
而conn的setAutoCommit方法,是指,在事务当中,是否执行一条语句就自动提交一次。
想在一个事务里进行多个操作。就必然将setAutoCommit的参数设置成false,在多个操作的最后调用conn.commit()方法,进行手动提交
(3)参数:true和false
假设如下:
1 数据库一个表格有50条记录
2 你设置参数为false
则在你执行整个查询SQL期间,一直是没有事务的,那么如果你的查询用到了一些函数,这些函数包含了多个查询语句,那么有可能会出现不一致的情况。
也就是说,函数、存储过程等,他们都将运行在非事务的环境下。
而你设置为true,则没有任何问题了,读一致性将保证不会出现问题。
所以一般设置为true,我自己是这样
分享到:
相关推荐
7. **事务管理**: JDBC支持事务控制,如`conn.setAutoCommit(false)`可以禁用自动提交,然后手动调用`conn.commit()`或`conn.rollback()`来提交或回滚事务。 8. **异常处理**: 在数据库操作中,应妥善处理`...
- 关闭自动提交:`conn.setAutoCommit(false);` - 添加SQL语句到批处理:`stmt.addBatch("SQL语句");` - 执行批处理:`stmt.executeBatch();` - 提交更改:`conn.commit();` 2. **使用PreparedStatement对象...
conn.setAutoCommit(false); // 关闭自动提交 PreparedStatement pstmt = conn.prepareStatement("update content set introtext=? where id=?"); pstmt.setString(1, tempIntroText); pstmt.setInt(2, id); pstmt...
public static void commitTransaction(Connection conn) throws SQLException { conn.commit(); conn.setAutoCommit(true); } public static void rollbackTransaction(Connection conn) throws SQLException { ...
Connection conn = ConnectionManager.getInstance().getConnection();这样来获得conn实体对象,然后就可以应用了。...conn.setAutoCommit(false);用事务提交 最后conn.commit(); conn.close();就可以了。
conn.setAutoCommit(false); // 开始事务 // 执行数据访问操作 conn.commit(); // 提交事务 } catch (Exception e) { conn.rollback(); // 回滚事务 } } ``` ##### 3.2 外部事务管理 将事务管理放在调用DAO...
conn.commit(); } catch (SQLException e) { conn.rollback(); e.printStackTrace(); } finally { conn.setAutoCommit(true); } ``` 此外,JDBC 4.0引入了自动注册驱动的功能,这意味着只需包含JDBC驱动,无需...
conn.setAutoCommit(false); try { // 提交批处理 statement.executeBatch(); // 若批处理无异常,则准备手动commit conn.commit(); } catch (Exception e) { e.printStackTrace(); // 批处理抛异常...
conn.setAutoCommit(false); Dao1 dao1 = new Dao1(conn); dao1.doSomething(); Dao2 dao2 = new Dao2(conn); dao2.doSomething(); Dao3 dao3 = new Dao3(conn); dao3.doSomething(); conn.commit(); } ...
conn.commit(); // 提交事务 } catch (Exception e) { conn.rollback(); // 如果有异常,回滚事务 } finally { conn.setAutoCommit(true); // 恢复自动提交 } ``` 此外,使用连接池(如HikariCP、C3P0等)可以...
conn.setAutoCommit(false); // 关闭自动提交 Statement stmt = conn.createStatement(); String sql1 = "UPDATE account_ning SET money=money-500 WHERE id='A'"; String sql2 = "UPDATE account_ning SET money=...
- 提交事务:`conn.commit();` 或 回滚事务:`conn.rollback();` - 关闭事务模式:`conn.setAutoCommit(true);` 5. JDBC优化技巧: - 使用PreparedStatement避免SQL注入。 - 使用批处理提高性能:`pstmt....
conn.commit(); // 提交事务 } catch (Exception e) { conn.rollback(); // 回滚事务 } finally { conn.setAutoCommit(true); // 恢复自动提交 } ``` 此外,SQLite还支持多种高级特性,如视图、触发器、存储过程...
JDBC支持事务控制,通过Connection的`setAutoCommit()`关闭自动提交,然后使用`commit()`和`rollback()`手动控制事务。例如: ```java conn.setAutoCommit(false); try { // SQL操作... conn.commit(); } ...
conn.commit(); // 提交事务 } catch (SQLException e) { conn.rollback(); // 回滚事务 } finally { conn.setAutoCommit(true); // 恢复自动提交 } ``` 此外,处理结果集(ResultSet)也是常见的任务。执行查询...
conn.setAutoCommit(false); // 关闭自动提交 try { // 执行SQL操作 conn.commit(); // 提交事务 } catch (Exception e) { conn.rollback(); // 如果发生错误,回滚事务 } finally { conn.setAutoCommit(true); ...
conn.commit(); // 提交事务 } catch (SQLException e) { conn.rollback(); // 如果出现异常,回滚事务 } finally { conn.setAutoCommit(true); // 恢复自动提交 } ``` ### 四、关闭资源 完成数据库操作后,...
在Java中,你可以通过`Connection`对象的`setAutoCommit(false)`来手动控制事务,然后使用`commit()`或`rollback()`来提交或回滚事务。例如: ```java conn.setAutoCommit(false); try { // 执行一系列操作 conn....