最近要实现百万级大数据 数据迁移 在导入的过程中肯定会出现各种个样的问题,长度超长 , 数据为空 , 类型异常 。。等等
所以我们在这里必须要用到java事务了 , 本次所使用的是JDBC连接数据库 所以就用到了JDBC事务!
首先了解一下,什么是事务: 程序中对数据库 进行的所有操作 , insert , update , delete 存储过程 .... 还包括一些复杂的SQL语句 例如经典的银行出账问题 , 要保证客户的钱 和银行的钱都是对的 不能出现差错 , 需要同时对数据库进行操作 银行扣钱 客户加钱 . 当然还有更复杂的 比如 同时要进行查询 删除 修改 ,, 等等 那么这就可以称之为一个整体 这就是事务. java事务 在项目还是很常见的 基本上所有项目都会用到 , 所以还是很有必要深入了解一下.
当我们做错事时经常会感叹到 , 世界上有卖后悔药就好了, 当然现实生活中肯定没有 , 但是在程序中就有 他就是 java事务 ! 操作数据库出现任何问题的时候 都可以通过事务处理来解决 回到原来的状态 , 这就是 我们常用的 事务回滚 (rollback) . 好了 这就进入正题: 这次写的 数据迁移程序 用的是JDBC连接数据库 , 所以就只说下这个地方的用法吧 !
在connection类中提供了3个控制事务的方法:
(1) setAutoCommit(Boolean autoCommit):设置是否自动提交事务;
(2) commit();提交事务;
(3) rollback();撤消事务;
首先,我们要设置事务的提交方式,
connection类 中事务默认是自动提交的, 也就是操作一下数据库 自动提交一次事务,所以就需要我们设置下 手动提交事务: con.setAutoCommit(false) 如果是ture 则自动提交 ,注意这是在程序开始的时候写的, 不要写在数据库操作代码的后面,
当对数据库操作完后 当然要提交下 con.commit() ; 证明这个整体是一个事务。
事务 一般都是配合 try catch 使用的 , 所以我们在出现异常的时候就要吃颗后悔药 , 要在catch里面 执行事务回滚 con.rollback(); 这样之前对数据库的所有操作 就已经完全恢复了为原来了!注意 必须在提交事务后才可以使用, 否则 程序是不会知道哪个是事务!
事务有四大特性:原子性 一致性 隔离性 持久性;
原子性:整个事务就像原子一样,是一个整体 不可再次进行分割。事务中对数据库的操作都是相互依赖的
要么全部执行 要么全部撤销!就像银行出账问题一样 必须同时执行SQL 否则银行钱扣了 客户缺没收到钱, 这岂不是乱套了!
一致性: 事务在处理的过程中必须要保证 对数据操作的正确性, 银行做500元交易的时候 银行减500 客户加500!
隔离性: 在进行事务处理的时候, 必须要保证 所需要的数据 是在其他事务修改它之前的数据 , 或是其他事务修改之后的数据。不能同时对同一数据进行事务处理!
持久性: 事务提交完后 对数据库的操作是永久性的 ,即使出现异常情况!