1、JDBC03 DAO模式NetCTOSS V1 DAO实现AccountService1. JDBC高级编程1.1. JDBC高级编程1.1.1. 事务简介事务(Transaction):数据库中保证交易可靠的机制。JDBC支持数据库中的事务概念,并且在JDBC中,事务默认是自动提交的。可能存在的问题:某些业务逻辑必须在一个事务中完成。如图-1所示。图-1 事务示意图事务特性介绍:ACID 原子性(Atomicity):事务必须是原子工作单元;对于其数据修改,要么全都执行,要么全都不执行 一致性(Consistency):事务在完成时,必须使所有的数据都保持一致状态 隔离性(Isolation
2、):由并发事务所作的修改必须与任何其它并发事务所作的修改隔离 持久性(Durability):事务完成之后,它对于系统的影响是永久性的事务是数据库的概念,JDBC支持事务,本质还是在数据库中实现的。1.1.2. JDBC事务APIJDBC中和事务相关API: Connection.getAutoCommit() :获得当前事务的提交方式,默认为true Connection.setAutoCommit():设置事务的提交属性,参数是true:自动提交;false:不自动提交 Cmit():提交事务 Connection.rollback():回滚事务1.1.3. JDBC标准事务编程模式JDB
3、C处理事务的通常模式: 先将事务的自动提交关闭; 执行事务中的若干SQL语句; 事务提交;SQL失败则回滚; 恢复JDBC的事务提交状态;释放资源。1. try2. / 1.定义用于在事务中执行的SQL语句3. String sql1 = update account set amount = amount - + amount + where id = + from + ;4. String sql2 = update account set amount = amount + + amount + where id = + to + ;5. autoCommit = con.getAuto
4、Commit(); / 2.获得自动提交状态6. con.setAutoCommit(false); / 3.关闭自动提交7. stmt.executeUpdate(sql1); / 4.执行SQL语句8. stmt.executeUpdate(sql2);9. mit(); / 5.提交10. con.setAutoCommit(autoCommit); / 6.将自动提交功能恢复到原来的状态11. /其他语句;12. catch(SQLException e)13. conn.rollback();/异常时回滚 14. 1.2. 批量更新1.2.1. 批量更新的优势批处理:发送到数据库作为
5、一个单元执行的一组更新语句。批处理降低了应用程序和数据库之间的网络调用,相比单个SQL语句的处理,批处理更为有效。1.2.2. 批量更新API addBatch(String sql) Statement类的方法, 可以将多条sql语句添加Statement对象的SQL语句列表中 addBatch() PreparedStatement类的方法, 可以将多条预编译的sql语句添加到PreparedStatement对象的SQL语句列表中 executeBatch() 把Statement对象或PreparedStatement对象语句列表中的所有SQL语句发送给数据库进行处理 clearBat
6、ch() 清空当前SQL语句列表1.2.3. 防止OutOfMemory如果PreparedStatement对象中的SQL列表包含过多的待处理SQL语句, 可能会产生OutOfMemory错误。所以需要及时处理SQL语句列表。1. for(int i =0; i 0?true:false);9. 2.2.3. 异常处理机制多层系统的异常处理原则: 谁抛出的异常,谁捕捉处理,因为只有异常抛出者,知道怎样捕捉处理异常; 尽量在当前层中捕捉处理抛出的异常,尽量不要抛出到上层接口; 尽量在每层中封装每层的异常类,这样可准确定位异常抛出的层; 如异常无法捕捉处理,则向上层接口抛出,直至抛给JVM,尽量避免;
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1