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));
}
}