在进行对数据库存储这方面代码编写时如果是分段执行需要注意如果过程中发生错误而没有添加事务控制的话就会发生
一、脏读
指一个线程中的事务读取到了另外一个线程中未提交的数据
二、不可重复读
指一个线程中的事务读取到了另外一个线程中提交的UPDATE数据
三、虚度
指一个线程中的事务读取到了另外一个线程中提交的INSERT数据
这些问题
然后再说一下事务的特性
事务分为
一、原子性
同一个事务的多条语句是不可分割的
二、一致性
事务必须让数据的状态从一个一致性状态变换到另一个一致性状态 例如 转账
三、隔离性
指在多线程环境中,一个线程的事务不能被其他线程中的事务所打扰
四、持久性
事务一旦被提交之后就要被永久保存
根据事务的这些特性,如果进行数据库操作的话应该加上事务控制。
进行操作前先开启事务 conn.setAutoCommit(false);
然后进行数据库操作
数据库操作完毕之后再进行事务结束操作
conn.commit();在这个命令执行之前进行的数据库操作都是更新的缓存而没有去更改具体的数据库。如果没有发生错误就会把事务所做的修改提交到数据库进行修改保存。
如果其中发生异常了
将事务语句放置于try/catch中 如果发生异常在catch中判断是不是由于连接conn为空,如果不是则是语句执行期间出错则需要数据回滚,不能让它修改数据库即conn.rollback();
关于事务
小白理解不当的地方请看到的大神指导