jdbc的批处理方法

jdbc的批处理方法
1、加载驱动    Class.forName("com.mysql.jdbc.Driver");
2、创建连接    conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/baybhhcsy""root""root");
3、写sql语句 sql = "insert into  user(email,passwd) values(?,?)";
4、创建prepareStatement对象预编译sql  ps = conn.prepareStatement(sql); 批处理的高效性
5、循环创建sql语句
for (User user : list) {
                ps.setString(1, user.getEmail());
                ps.setString(2, user.getPasswd());
                ps.addBatch();
            }
6、将ps加入到队列当中    ps.addBatch();
 
7、执行sql语句    ps.executeBatch();  返回值是个int[]的数组
 
 
package com.pk.jdbc0304.dao;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.List;

import com.pk.jdbc0304.po.User;

/**
* @author Administrator
 *    完成一次性往数据库中插入10 个用户
*/

public class AddUsersDao {

    /*
     * 写一个方法  该方法插入一个用户  要想使用该方法插入10 个用户  调用该方法10次
     *     连接connection和Statement对象被创建和关闭各10次  sql语句被编译和执行各10次
     */


    public boolean regUser(User user){
        boolean flag = false;

        Connection conn = null;//连接对象

        Statement st = null;//查询窗口对象

        StringBuilder sql = new StringBuilder();
        sql.append("insert into user(email,passwd,nickname,sex) values('");
        sql.append(user.getEmail());
        sql.append("','");
        sql.append(user.getPasswd());
        sql.append("','");
        sql.append(user.getNickname());
        sql.append("',");
        sql.append(user.getSex());
        sql.append(")");
        System.out.println(sql.toString());

        try {
            Class.forName("com.mysql.jdbc.Driver");
            conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/puckasoft", "root", "1qaz2wsx");

            st = conn.createStatement();

            int i = st.executeUpdate(sql.toString());

            if(i != 0){
                flag = true;
            }

        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        } catch (SQLException e) {
            e.printStackTrace();
        } finally {
            if(st != null){
                try {
                    st.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }
            if(conn != null){
                try {
                    conn.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }
        }
        return flag;
    }

    /*
     * 一次性插入10个用户  参数就带了10个用户的信息
     * Connection对象和Statement对象各被创建和关闭1次  sql语句被编译和执行各10次
     */

    public boolean addUsersByState(List<User> list){
        boolean flag = true;
        Connection conn = null;
        Statement st = null;

        try {
            Class.forName("com.mysql.jdbc.Driver");
            conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/puckasoft", "root", "1qaz2wsx");
            st = conn.createStatement();

            for (User user : list) {
                StringBuilder sql = new StringBuilder();
                sql.append("insert into user(email,passwd,nickname,sex) values('");
                sql.append(user.getEmail());
                sql.append("','");
                sql.append(user.getPasswd());
                sql.append("','");
                sql.append(user.getNickname());
                sql.append("',");
                sql.append(user.getSex());
                sql.append(")");
                int i = st.executeUpdate(sql.toString());
            }
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
            flag = false;
        } catch (SQLException e) {
            e.printStackTrace();
            flag = false;
        } finally {
            if(st != null){
                try {
                    st.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }
            if(conn != null){
                try {
                    conn.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }
        }
        return flag;
    }

    /**
     * 一次性插入10个用户
     *     Connection和PreparedStatement对象被创建和关闭一次  但是sql语句被编译仅仅一次  执行10次
     */

    public boolean addUsersByPre(List<User> list){
        boolean flag = true;
        Connection conn = null;
        PreparedStatement ps = null;

        String sql = "insert into user(email,passwd,sex,nickname) values(?,?,?,?)";
        try {
            Class.forName("com.mysql.jdbc.Driver");
            conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/puckasoft", "root", "1qaz2wsx");

            ps = conn.prepareStatement(sql);//sql语句被编译一次

            for (User user : list) {
                ps.setString(1, user.getEmail());
                ps.setString(2, user.getPasswd());
                ps.setInt(3, user.getSex());
                ps.setString(4, user.getNickname());
                int i = ps.executeUpdate();
            }
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
            flag = false;
        } catch (SQLException e) {
            e.printStackTrace();
            flag = false;
        } finally {
            if(ps != null){
                try {
                    ps.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }
            if(conn != null){
                try {
                    conn.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }
        }

        return flag;
    }

    /*
     * 批处理的写法  批处理一定是多次执行同一条sql语句
     */

    public boolean addUsersByStandard(List<User> list){
        boolean flag = true;
        Connection conn = null;
        PreparedStatement ps = null;
        String sql = "insert into user(email,passwd,sex,nickname) values(?,?,?,?)";

        try {
            Class.forName("com.mysql.jdbc.Driver");
            conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/puckasoft", "root", "1qaz2wsx");
            ps = conn.prepareStatement(sql);

            for (User user : list) {
                ps.setString(1, user.getEmail());
                ps.setString(2, user.getPasswd());
                ps.setInt(3, user.getSex());
                ps.setString(4, user.getNickname());
                ps.addBatch();//将当前的命令加入到批处理的命令行中  并没有执行
            }
            ps.executeBatch();//执行批处理的命令
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        } catch (SQLException e) {
            e.printStackTrace();
        } finally {
            if(ps != null){
                try {
                    ps.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }
            if(conn != null){
                try {
                    conn.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }
        }
        return flag;
    }


    public static void main(String[] args) {
        List<User> list = new ArrayList<User>();
        for (int i = 0; i < 10 ; i++) {
            User user = new User();
            user.setEmail("meisuzhi" + i + "@126.com");
            user.setNickname("buyao" + i);
            user.setPasswd("654213");
            user.setSex(0);
            list.add(user);
        }
        AddUsersDao dao = new AddUsersDao();
//        System.out.println(dao.addUsersByState(list));
        System.out.println(dao.addUsersByStandard(list));
    }
}




原文地址:https://www.cnblogs.com/babyhhcsy/p/2985765.html