day27_SQL语言(十二)JDBC事务及PreparedStatement

本文介绍了JDBC事务的使用,包括事务的自动提交、手动提交、回滚操作,并通过转账案例进行了实战演示。接着详细讲解了PreparedStatement,阐述了SQL注入问题及其危害,展示了如何使用PreparedStatement防止SQL注入,并探讨了其优点、使用步骤和常用API。还深入讨论了PreparedStatement的预编译原理,以提高执行效率。
摘要由CSDN通过智能技术生成

一、JDBC事务

(一)概述

mysql默认是自动提交事务的,如果想同时执行多条SQL语句,而且要保证多条SQL同时成功,那么就需要手动的来提交事务。

Jdbc默认也是自动提交事务的,可以设置为手动提交。

为了让多个 SQL 语句作为一个事务执行:

调用 Connection 对象的 setAutoCommit(false); 以取消自动提交事务。。

在所有的 SQL 语句都成功执行后,调用 commit(); 方法提交事务

在出现异常时,调用 rollback(); 方法回滚事务。

(二)案例

1.需求

转账案例,账户1向账户2转账。要求事务控制,保证同时成功或同时失败。

2.数据准备

创建账户表,添加数据

create table account(

     id int primary key, -- 账户id

  money int  -- 账户钱数

);

insert into account values(1,10000);

insert into account values(2,10000);

3.示例代码

(1)不加入事务控制

public class Demo06 {

    public static void main(String[] args) {

        Scanner sc = new Scanner(System.in);
        System.out.println("
请输入转出账户");
        String outId = sc.nextLine();

        System.out.println("请输入转入账户");
        String inId = sc.nextLine();

        System.out.println("请输入转账金额");
        String money = sc.nextLine();

        Connection conn = null;
        Statement st = null;
        try{
            conn = JdbcUtil.getConnection();
            st = conn.createStatement();
            String sql = "update account set money=money-"+money+" where id="+outId;
            String sql2 = "update account set money=money+"+money+" where id="+inId;

            int result1 = st.executeUpdate(sql);

         
  // 如果在此处发生了异常, sql执行成功,sql2没有执行,将会出现问题,因此   //需要事务控制
            //int x = 10/0;


            int result2 = st.executeUpdate(sql2);

        }catch(Exception e){
            e.printStackTrace();
        }finally{
            JdbcUtil.close(conn,st);
        }

    }
}

(2)事务控制

package com.offcn.test;

import com.offcn.utils.JdbcUtil;
import java.sql.Connection;
impo

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值