jdbc事务处理
2017-05-26 20:12
267 查看
为了保证数据的一致性、完整性
比如100条数据,插入数据库
前50条成功插入,后面50没有成功插入,这就属于不完整数据
所以我们要用事务管理来解决
代码
比如100条数据,插入数据库
前50条成功插入,后面50没有成功插入,这就属于不完整数据
所以我们要用事务管理来解决
// 设置为false,就不会自动提交到数据库,比如前50条数据通过,后面50不通过,这样也不会进入数据库 conn.setAutoCommit(false); 但是,使用conn.setAutoCommit(false);要注意数据库死锁 所以 (设定setAutoCommit(false)没有在catch中进行Connection的rollBack操作,操作的表就会被锁住,造成数据库死锁): try { conn = getConnection(); conn.setAutoCommit(false); insertUserData(conn); insertAddressData(conn); conn.commit(); } catch (SQLException e) { // TODO Auto-generated catch block System.out.println("=====捕获到sql异常======"); e.printStackTrace(); try { conn.rollback(); System.out.println("======事务回滚成功====="); } catch (Exception e2) { // TODO: handle exception e2.printStackTrace(); } 注意: setAutoCommit在try里面 conn.rollback();一定要在catch里面 // conn.rollback();是数据回滚,是数据库中事物的执行,有一条插入失败,所有的都不插入,数据库回滚到操作之前的样子
代码
package com.chenzebin.jdbc; import java.sql.Connection; import java.sql.DriverManager; import java.sql.SQLException; import java.sql.Statement; public class TransactionTest { public static Connection getConnection() { Connection conn = null; try { Class.forName("com.mysql.jdbc.Driver"); conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/jsp_db", "root", ""); } catch (Exception e) { // TODO: handle exception e.printStackTrace(); } return conn; } public static void insertUserData(Connection conn) throws SQLException { String sql = "insert into tbl_user(id,name,password,email)" + "values(10,'Tom','123456','tom@gmail.com')"; Statement st = conn.createStatement(); int count = st.executeUpdate(sql); System.out.println("向用户表插入" + count + "条记录"); } public static void insertAddressData(Connection conn) throws SQLException { String sql = "insert into tbl_address(id,city,country,user_id)" + "values(1,'shanghai','china','10')"; Statement st = conn.createStatement(); int count = st.executeUpdate(sql); System.out.println("向地址表中插入了" + count + "条记录"); } public static void main(String[] args) { Connection conn = null; try { conn = getConnection(); conn.setAutoCommit(false); insertUserData(conn); insertAddressData(conn); conn.commit(); } catch (SQLException e) { // TODO Auto-generated catch block System.out.println("=====捕获到sql异常======"); e.printStackTrace(); try { conn.rollback(); System.out.println("======事务回滚成功====="); } catch (Exception e2) { // TODO: handle exception e2.printStackTrace(); } }finally { try { if(conn != null) { conn.close(); } } catch (Exception e3) { // TODO: handle exception e3.printStackTrace(); } } } }
相关文章推荐
- 一个jdbc的例子(包含sql语句的批处理,事务处理,数据绑定prepare,)
- Java Bean 中使用JDBC方式进行事务处理
- 理解事务处理、事务处理的隔离级别,和使用JDBC进行事务处理
- (转载)jdbc事务处理
- JDBC中的事务处理
- jdbc事务处理
- JDBC事务处理,转贴
- 理解事务处理、事务处理的隔离级别,和使用JDBC进行事务处
- JDBC中执行存储过程和对事务的处理
- JDBC中的事务处理
- 一个jdbc的例子(包含sql语句的批处理,事务处理,数据绑定prepare)
- 事务处理总结【JDBC事务|JTA事务|容器事务】
- jdbc事务处理
- 理解事务处理、事务处理的隔离级别,和使用JDBC进行事务处
- 事务处理总结【JDBC事务|JTA事务|容器事务
- Eclipse3.1.1+Webloigc 9.0通过数据源实现JDBC简单事务处理
- JDBC中处理事务(SXT)
- JavaBean中使用JDBC方式进行事务处理
- jdbc事务处理(commit rollback)
- JDBC简单的处理事务和批处理