美文网首页
jdbc事务处理

jdbc事务处理

作者: Corbin___ | 来源:发表于2017-06-06 00:24 被阅读0次

为了保证数据的一致性、完整性
比如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();
            }
        }

    }

}







相关文章

  • JAVA利用JDBC对数据库的操作和JDBC编程之事务处理

    JDBC事务处理:

  • jdbc开发事务步骤

    JDBC中事务处理的步骤: 1、要取消掉JDBC的自动提交:void setAutoCommit(boolean ...

  • 数据库第五天

    一、JDBC中事务处理的步骤: 1、要取消掉JDBC的自动提交:void setAutoCommit(boolea...

  • jdbc事务处理

    为了保证数据的一致性、完整性比如100条数据,插入数据库前50条成功插入,后面50没有成功插入,这就属于不完整数据...

  • JDBC--事务处理

    对于任何的数据库应用来说,事务都是非常重要的,事务是保证底层数据完整的重要手段,没有支持的数据库应用是非常脆弱的。...

  • 事物处理、DAO

    事务处理 JDBC中,事务是自动提交的。每执行一次DML就提交一次事务。 事务特性: 原子性(Atomicity)...

  • mybatis是如何配合spring事务的?

    必备知识:事务处理、sql执行最终都是依赖JDBC连接去操作。并且一个事务只能在一个连接中执行。 在mybatis...

  • spring aop

    1、Spring中事务处理的作用: Spring事务处理,是将事务处理的工作统一起来,并为事务处理提供通用的支持。...

  • JDBC中如何进行事务处理?

    Connection提供了事务处理的方法,通过调用setAutoCommit(false)可以设置手动提交事务;当...

  • 关于 tp5 事务操作总结

    前提: 使用事务处理的话,需要数据库引擎支持事务处理。比如 MySQL 的 MyISAM 不支持事务处理,需要使用...

网友评论

      本文标题:jdbc事务处理

      本文链接:https://www.haomeiwen.com/subject/adawfxtx.html