JDBC批处理

普通批处理

import java.sql.*;

public class jdbctest1 {
    public static void main(String[] args){
        String sql1="insert into users values (null,'zhang1','zhang1')";
        String sql2="insert into users values (null,'zhang2','zhang2')";
        String sql3="insert into users values (null,'zhang3','zhang3')";
        String sql4="insert into users values (null,'zhang4','zhang4')";
        String sql5="insert into users values (null,'zhang5','zhang5')";
        String sql6="insert into users values (null,'zhang6','zhang6')";
        String sql7="insert into users values (null,'zhang7','zhang7')";
        String sql8="insert into users values (null,'zhang8','zhang8')";
        String sql9="update users set nuername='li4' where nuername='zhang4' ";
        String sql10="delete from users where nuername='zhangfei' ";

        //加载驱动
        try {
            Class.forName("com.mysql.jdbc.Driver");
        } catch (ClassNotFoundException e) {
            System.err.println("驱动加载失败!");
            e.printStackTrace();
        }
        //创建链接
        Connection conn=null;
        try {
            conn= DriverManager.getConnection("jdbc:mysql://localhost:33060/mytest","root","Root");
        } catch (SQLException e) {
            System.err.println("连接创建失败!");
            e.printStackTrace();
        }
        //生成对象
        Statement stmt=null;
        try {
            stmt=conn.createStatement();
        } catch (SQLException e) {
            System.err.println("对象生成失败!");
            e.printStackTrace();
        }
        //对话
        try {
            stmt.addBatch(sql1);
            stmt.addBatch(sql2);
            stmt.addBatch(sql3);
            stmt.addBatch(sql4);
            stmt.addBatch(sql5);
            stmt.addBatch(sql6);
            stmt.addBatch(sql7);
            stmt.addBatch(sql8);
            stmt.addBatch(sql9);
            stmt.addBatch(sql10);
        } catch (SQLException e) {
            e.printStackTrace();
        }


        try {
            conn.setAutoCommit(false);
            stmt.executeBatch();
            conn.commit();
        } catch (SQLException e) {
            try {
                conn.rollback();
            } catch (SQLException ex) {
                ex.printStackTrace();
            }
            e.printStackTrace();
        }


        //收尾

    }
}

在对话阶段,将各个语句执行加入批处理,然后统一执行,同时增加事务管理机制(commit,rollback),如果一条语句出现问题,则全部回滚

预编译批处理

import java.sql.*;
public class jdbctest3 {
    public static void main(String[] args) throws SQLException {
        try {
            Class.forName("com.mysql.jdbc.Driver");
        } catch (ClassNotFoundException e) {
            System.err.println("驱动加载失败!!");
            e.printStackTrace();
        }
        Connection conn=null;
        try {
            conn=DriverManager.getConnection("jdbc:mysql://localhost:33060/mytest","root","Root");
        } catch (SQLException e) {
            System.err.println("连接建立失败!!");
            e.printStackTrace();
        }
        String insertsql="insert into users values(null,?,?)";
        PreparedStatement pstmt=null;
        try {
            pstmt=conn.prepareStatement(insertsql);
        } catch (SQLException e) {
            System.err.println("对象生成失败!!");
            e.printStackTrace();
        }

        pstmt.setObject(1,"zhao1");
        pstmt.setObject(2,"zhao1");
        pstmt.addBatch();
        pstmt.setObject(1,"zhao2");
        pstmt.setObject(2,"zhao2");
        pstmt.addBatch();
        pstmt.setObject(1,"zhao3");
        pstmt.setObject(2,"zhao3");
        pstmt.addBatch();
        pstmt.setObject(1,"zhao4");
        pstmt.setObject(2,"zhao4");
        pstmt.addBatch();

        conn.setAutoCommit(false);
        pstmt.executeBatch();
        conn.commit();

        if (pstmt!=null){
            pstmt.close();
        }
        if (conn!=null){
            conn.close();
        }



    }
}

同样是在对话阶段,进行批处理。但是观察两个批处理我们可以发现预编译批处理灵活性大大降低。在预编译批处理中,同一批处理只能处理相同类型,例如执行insert操作,那么在这一批中全部都是insert
但是,相对于普通批处理,预编译批处理的安全性要好得多得多,而且,预编译处理是先进行编译的,所以效率相对于普通批处理也很高
大家可以点击这里参考预编译处理机制(sql注入问题解决原理)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

我的大男子主义

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值