orcale JDBC 事务处理

Oracle JDBC事务确保数据的原子性,使得一组DML语句要么全部成功执行,要么在错误时全部回滚,避免数据库状态不一致。
摘要由CSDN通过智能技术生成

事务的原子性
事务用于保证数据的原子性,它由一组相关的DML语句组成,该组DML语句要么全部成功,要么就全部失败。

package com.javakc.one2many;

public class OrderDetailsModel {
    private String id;
    private String orderId;
    private String goodsName;
    private int price;
    private int realPrice;
    private int num;

    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }

    public String getOrderId() {
        return orderId;
    }

    public void setOrderId(String orderId) {
        this.orderId = orderId;
    }

    public String getGoodsName() {
        return goodsName;
    }

    public void setGoodsName(String goodsName) {
        this.goodsName = goodsName;
    }

    public int getPrice() {
        return price;
    }

    public void setPrice(int price) {
        this.price = price;
    }

    public int getRealPrice() {
        return realPrice;
    }

    public void setRealPrice(int realPrice) {
        this.realPrice = realPrice;
    }

    public int getNum() {
        return num;
    }

    public void setNum(int num) {
        this.num = num;
    }
}

package com.javakc.one2many;

public class OrderModel {
    private String id;
    private String c_name;
    private String c_address;
    private String c_phoneNumber;
    private String sellerShop;
    private int totalAmount;
    private String buyingTime;

    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }

    public String getC_name() {
        return c_name;
    }

    public void setC_name(String c_name) {
        this.c_name = c_name;
    }

    public String getC_address() {
        return c_address;
    }

    public void setC_address(String c_address) {
        this.c_address = c_address;
    }

    public String getC_phoneNumber() {
        return c_phoneNumber;
    }

    public void setC_phoneNumber(String c_phoneNumber) {
        this.c_phoneNumber = c_phoneNumber;
    }

    public String getSellerShop() {
        return sellerShop;
    }

    public void setSellerShop(String sellerShop) {
        this.sellerShop = sellerShop;
    }

    public int getTotalAmount() {
        return totalAmount;
    }

    public void setTotalAmount(int totalAmount) {
        this.totalAmount = totalAmount;
    }

    public String getBuyingTime() {
        return buyingTime;
    }

    public void setBuyingTime(String buyingTime) {
        this.buyingTime = buyingTime;
    }
}

package com.javakc.one2many;

import com.javakc.db.Utils;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.util.Iterator;
import java.util.Set;

public class Service1<reture> {
    public static boolean insert(OrderModel om, Set<OrderDetailsModel> details) throws SQLException, ClassNotFoundException {

        boolean flag = false;
        Connection conn = Utils.getConn();
        try {
            //1,订单记录
            String sql = "insert into t_order(id,c_name,c_address,C_phoneNumber,sellerShop,totalAmount,BuyingTime)"
                    + "values(?,?,?,?,?,?,?)";
            PreparedStatement pstmt = conn.prepareStatement(sql);
            pstmt.setString(1, om.getId());//订单编号
            pstmt.setString(2, om.getC_name());//收货人姓名
            pstmt.setString(3, om.getC_address());//收货人地址
            pstmt.setString(4, om.getC_phoneNumber());//收货人电话
            pstmt.setString(5, om.getSellerShop());//卖家店铺
            pstmt.setInt(6, om.getTotalAmount());//总金额
            pstmt.setString(7, om.getBuyingTime());//购买时间

            pstmt.executeUpdate();

            //多个订单明细记录
            sql = "insert into t_order_details (id,orderId,goodsName,price,realPrice,num)values(?,?,?,?,?,?,?)";
            PreparedStatement pstmt2 = conn.prepareStatement(sql);
            Iterator<OrderDetailsModel> it = details.iterator();
            while (it.hasNext()) {
                OrderDetailsModel d = it.next();
                pstmt2.setString(1, d.getId());//订单明细编号
                pstmt2.setString(2, d.getOrderId());//订单编号
                pstmt2.setString(3, d.getGoodsName());//商品名称
                pstmt2.setInt(4, d.getPrice());//商品价格
                pstmt2.setInt(5, d.getRealPrice());//实际价格
                pstmt2.setInt(6, d.getNum());//商品数量

                pstmt2.addBatch();

            }
            //执行批量insert销售明细记录
            pstmt2.executeBatch();
            flag = true;
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            try {
                if (conn != null) {
                    conn.close();
                }
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
        return flag;
    }
    reture flag;
}
package com.javakc.one2many;

import java.sql.SQLException;
import java.util.HashSet;
import java.util.Set;

public class Test {
    /**
     * Model+List
     *
     * @param args
     */
    public static void main(String[] args) throws SQLException, ClassNotFoundException {
        //创建销售单
        OrderModel om = new OrderModel();
        om.setId("1");
        om.setC_name("晓小强");
        om.setC_address("北京");
        om.setC_phoneNumber("1231243");
        om.setSellerShop("电脑");
        om.setTotalAmount(123);
        om.setBuyingTime("2020-10-10");

        //创建多个销售明细单
        Set<OrderDetailsModel> details = new HashSet<OrderDetailsModel>();
        OrderDetailsModel s1 = new OrderDetailsModel();
        s1.setId("M1");
        s1.setOrderId("D1");
        s1.setGoodsName("吸尘器");
        s1.setPrice(1899);
        s1.setRealPrice(959);
        s1.setNum(1);

        OrderDetailsModel s2 = new OrderDetailsModel();
        s2.setId("M2");
        s2.setOrderId("D1");
        s2.setGoodsName("净化器");
        s2.setPrice(2999);
        s2.setRealPrice(1999);
        s2.setNum(2);

        OrderDetailsModel s3 = new OrderDetailsModel();
        s3.setId("M3");
        s3.setOrderId("D1");
        s3.setGoodsName("榨汁机");
        s3.setPrice(369);
        s3.setRealPrice(279);
        s3.setNum(1);

        details.add(s1);
        details.add(s2);
        details.add(s3);

        boolean flag=Service1.insert(om, details);
        System. out . println("是否操作成功: "+flag);

    }
}

在这里插入图片描述
出现错误,事务回滚,不添加数据库。
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值