-
setAutoCommit(false)又没手动commit,为什么还会更新数据库5
请问各位大神们,java存储数据库,程序手动设置了setAutoCommit为false,后面当sql执行时,如果手动connection.commit,这时候数据库数据是马上更新的,但是如果不手动commit,会发现数据库是隔差不多2,30秒才更新数据,有延迟,请问这是为什么?数据库用的是mysql2014年7月15日 11:46
3个答案 按时间排序 按投票排序
-
采纳的答案
这种情况一般是由于setAutoCommit后没有在try catch中加入rollback
setAutoCommit总的来说就是保持数据的完整性,一个系统的更新操作可能要涉及多张表,需多个SQL语句进行操作
举个例子:
循环里连续的进行插入操作,如果你在开始时设置了:conn.setAutoCommit(false);
最后才进行conn.commit(),这样你即使插入的时候报错,修改的内容也不会提交到数据库,
而如果你没有手动的进行setAutoCommit(false);
出错时就会造成,前几条插入,后几条没有
会形成脏数据~~
而经常会出现这样的情况
设定setAutoCommit(false)时没有在catch中进行Connection的rollBack操作,操作的表就会被锁住,造成数据库死锁(当然这样的情况也有可能变成数据库更新延迟)2014年7月15日 12:55
-
看下数据库的引擎是哪种类型,如果是innodb, 不执行commit,数据不会更新;如果用的是myisam引擎,因为不支持事物,不执行commit,也会更新数据。
+1
这个问题,如果肯定是数据库端的操作了。不支持事务应该纪律比较大的。2014年7月18日 13:04
-
看下数据库的引擎是哪种类型,如果是innodb, 不执行commit,数据不会更新;如果用的是myisam引擎,因为不支持事物,不执行commit,也会更新数据。
2014年7月15日 21:23
相关推荐
在Java中,我们可以使用`java.sql.Connection`对象的`setAutoCommit(false)`来关闭自动提交,然后在事务完成后手动调用`commit()`来提交更改。同时,为了确保线程安全,我们需要对数据库连接和操作进行适当的同步...
在Java中,可以通过Connection对象的setAutoCommit(false)关闭自动提交,然后手动调用commit()或rollback()。 7. **错误处理与资源释放**:在完成数据库操作后,务必关闭ResultSet、Statement和Connection,以释放...
同时,为了保证数据的一致性,了解事务处理也是必要的,例如,使用`Connection`对象的`setAutoCommit(false)`来开启手动提交事务,以及`commit()`和`rollback()`来控制事务边界。 综上所述,Java连接数据库涉及的...
在Java中,可以通过Connection对象的setAutoCommit()方法关闭自动提交,然后手动调用commit()或rollback()来控制事务的提交和回滚。例如: ```java connection.setAutoCommit(false); try { // 执行数据库操作 ...
通过`Connection`对象的`setAutoCommit(false)`禁用自动提交,然后手动调用`commit()`或`rollback()`来控制事务的边界。 6. **关闭资源**:为了防止资源泄漏,使用完`ResultSet`、`Statement`和`Connection`后,应...
其中,con是数据库连接对象,flag是一个布尔值,true表示自动提交,false表示手动提交。 二、手动提交事务 手动提交事务是指在执行多个SQL语句后,才提交事务。这种方式可以确保多个操作的原子性,即要么所有操作...
通过`Connection`的`setAutoCommit(false)`禁用自动提交,然后手动调用`commit()`或`rollback()`。 9. **批处理** 对于多条相似的SQL语句,可以使用`Statement`的`addBatch()`和`executeBatch()`提高性能。 10. *...
当调用`DriverManager.getConnection()`方法时,`DriverManager`会从已经加载的驱动程序池中找到与指定数据库URL相匹配的驱动程序,进而建立数据库连接。 #### 二、加载不同类型的JDBC驱动程序 在使用JDBC连接...
例如,使用`Connection.setAutoCommit(false)`开启手动事务控制,`Connection.commit()`和`Connection.rollback()`来提交或回滚事务。批处理通过`Statement.addBatch()`和`Statement.executeBatch()`提升性能。而...
JSP可以通过Connection对象的setAutoCommit(false)开启手动提交,并在所有操作成功后调用commit(),如果出现错误则调用rollback()。 八、JDBC优化技巧 1. 使用PreparedStatement而非Statement,因为前者能缓存SQL...
在Java中,可以通过Connection对象的setAutoCommit(false)来关闭自动提交,然后手动调用commit()或rollback()方法控制事务。 六、异常处理 在Java中,使用try-catch-finally语句块处理可能出现的SQLException。...
通过`Connection.setAutoCommit(false)`禁用自动提交,然后手动调用`commit()`或`rollback()`来控制事务。 5. **预编译语句(PreparedStatement)** PreparedStatement是优化过的Statement,允许预先编译SQL语句,...
使用`Connection`对象的`setAutoCommit(false)`来禁用自动提交,然后手动调用`commit()`或`rollback()`。示例: ```java conn.setAutoCommit(false); try { // 执行一系列操作 conn.commit(); } catch ...
`Connection`对象提供了`setAutoCommit(false)`来禁用自动提交,然后手动调用`commit()`或`rollback()`来控制事务边界。 5. **异常处理**: 为了保证代码健壮性,工具类应该捕获并适当地处理可能出现的数据库相关...
在Java中,可以通过`Connection`对象的`setAutoCommit(false)`禁用自动提交,然后手动调用`commit()`或`rollback()`来控制事务。 6. **异常处理** - 在数据库操作中,应充分考虑可能抛出的异常,如`SQLException`...
通过Connection的setAutoCommit(false)关闭自动提交,然后手动调用commit()或rollback()。 6. **JDBC连接池** - 为了优化性能,开发者通常使用连接池(如C3P0、HikariCP、Apache DBCP等),预先创建并维护一定数量...
在Java中,可以使用`Connection`对象的`setAutoCommit(false)`来禁用自动提交,然后手动调用`commit()`或`rollback()`方法来控制事务的提交和回滚。这在处理一系列相互关联的操作时非常有用,确保数据的一致性。 在...
通过setAutoCommit(false)关闭自动提交,然后手动调用commit()或rollback()控制事务边界,可以确保数据的一致性。在多线程环境中,还需要考虑并发控制和锁机制。 最后,JDBC 4.0引入了新的特性,如自动注册驱动、...
- 内存数据库支持事务,通过`Connection`对象的`setAutoCommit(false)`禁用自动提交,然后手动调用`commit()`或`rollback()`来控制事务。 5. **关闭资源**: - 记得在使用完毕后,按顺序关闭`ResultSet`、`...
7. **事务处理**:在Java中,可以使用`Connection`对象的`setAutoCommit(false)`来开启手动事务,`commit()`提交事务,`rollback()`回滚事务。 8. **数据库连接关闭**:在完成数据库操作后,记得关闭`Connection`、...