在我们实际开发中,肯定会遇到大批量的数据来进行入库操作。
如果不使用框架应该怎么进行数据的批量入库呢。
使用preparedStatement的addBatch()和executeBatch()方法可以进行批量操作。
整体思路是:
1.批量插入首先需要构造一个updateSet,用来存储User对象,创建一个updateSet,然后初始化数据。
再将updateSet中的数据批量进行插入。
2.批量删除和批量修改需要先把数据库中USER表中的数据都查出来,存入updateSet中,然后再执行删除和更新的操作。
具体代码:
1.首先我们需要自己实现一个数据库连接池。
public class C3P0Utils {
// 创建数据源
private static ComboPooledDataSource datasoure = new ComboPooledDataSource();
// 设置数据库信息
static {
try {
datasoure.setDriverClass("com.mysql.jdbc.Driver");
datasoure.setJdbcUrl(
"jdbc:mysql://localhost:3306/testDB?user=root&password=1234&useUnicode=true&characterEncoding=UTF-8");
datasoure.setUser("root");
datasoure.setPassword("1234");
} catch (Exception e) {
e.printStackTrace();
}
}
// 获取数据库连接对象
public static Connection getConnection() {
Connection conn = null;
try {
conn = datasoure.getConnection();
} catch (Exception e) {
e.printStackTrace();
}
return conn;
}
// 关闭数据库连接
public static void close(Connection conn) {
try {
if (conn != null && conn.isClosed()) {
conn.close();
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
2.实体类User
public class User {
private int id;//id
private String name;//用户名
private int old;//年龄
private String sex;//性别
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getOld() {
return old;
}
public void setOld(int old) {
this.old = old;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
@Override
public String toString() {
return "User [id=" + id + ", name=" + name + ", old=" + old + ", sex=" + sex + "]";
}
public User(String name, int old, String sex) {
super();
this.name = name;
this.old = old;
this.sex = sex;
}
public User() {
super();
}
}
3.测试类(包含数据查询,UpdateSet初始化,批量插入,删除,更新)
public class C3P0Test {
private static Connection conn = null;
private static PreparedStatement ps = null;
private static ResultSet rs = null;
public static HashSet<User> userSet = new HashSet<>();
public static void main(String[] args) {
// 1.批量插入操作
// getData();
// insertData();
// 2.批量更新操作
// getDataByMySQL();
// System.out.println(userSet.toString());
// updateData();
//3.批量删除操作
// getDataByMySQL();
// System.out.println(userSet.toString());
// deleteData();
}
// 查询数据库所有User数据
private static void getDataByMySQL() {
try {
int count = 0;
conn = C3P0Utils.getConnection();
conn.setAutoCommit(false);
String sql = "select * from USER";
ps = conn.prepareStatement(sql);
rs = ps.executeQuery();
while (rs.next()) {
User user = new User();
user.setId(rs.getInt(1));
user.setName(rs.getString(2));
user.setOld(rs.getInt(3));
user.setSex(rs.getString(4));
userSet.add(user);
count++;
}
System.out.println("查询到" + count + "条数据");
} catch (Exception e) {
try {
conn.rollback();
} catch (SQLException e1) {
e1.printStackTrace();
}
e.printStackTrace();
} finally {
try {
C3P0Utils.close(conn);
if (ps != null) {
ps.close();
}
} catch (SQLException e) {
e.printStackTrace();
}
}
}
// 初始化userSet
public static void getData() {
User u1 = new User("张三", 35, "男");
User u2 = new User("李四", 25, "男");
User u3 = new User("王五", 45, "女");
User u4 = new User("赵六", 15, "女");
userSet.add(u1);
userSet.add(u2);
userSet.add(u3);
userSet.add(u4);
}
// 批量插入数据
public static void insertData() {
try {
int count = 0;
conn = C3P0Utils.getConnection();
conn.setAutoCommit(false);
String sql = "insert into USER(name,old,sex) value(?,?,?)";
ps = conn.prepareStatement(sql);
for (User user : userSet) {
ps.setString(1, user.getName());
ps.setInt(2, user.getOld());
ps.setString(3, user.getSex());
ps.addBatch();
count++;
}
ps.executeBatch();
ps.clearBatch();
conn.commit();
System.out.println("添加了" + count + "条数据");
} catch (Exception e) {
try {
conn.rollback();
} catch (SQLException e1) {
e1.printStackTrace();
}
e.printStackTrace();
} finally {
try {
C3P0Utils.close(conn);
if (ps != null) {
ps.close();
}
} catch (SQLException e) {
e.printStackTrace();
}
}
}
// 批量删除数据
public static void deleteData() {
try {
int count = 0;
conn = C3P0Utils.getConnection();
conn.setAutoCommit(false);
String sql = "delete from USER where id =?";
ps = conn.prepareStatement(sql);
for (User user : userSet) {
ps.setInt(1, user.getId());
ps.addBatch();
count++;
}
ps.executeBatch();
ps.clearBatch();
conn.commit();
System.out.println("删除了" + count + "条数据");
} catch (Exception e) {
try {
conn.rollback();
} catch (SQLException e1) {
e1.printStackTrace();
}
e.printStackTrace();
} finally {
try {
C3P0Utils.close(conn);
if (ps != null) {
ps.close();
}
} catch (SQLException e) {
e.printStackTrace();
}
}
}
// 批量更新数据
public static void updateData() {
try {
int count = 0;
conn = C3P0Utils.getConnection();
conn.setAutoCommit(false);
String sql = "UPDATE USER SET old = 30 WHERE id = ?";
ps = conn.prepareStatement(sql);
for (User user : userSet) {
ps.setInt(1, user.getId());
ps.addBatch();
count++;
}
ps.executeBatch();
ps.clearBatch();
conn.commit();
System.out.println("更新了" + count + "条数据");
} catch (Exception e) {
try {
conn.rollback();
} catch (SQLException e1) {
e1.printStackTrace();
}
e.printStackTrace();
} finally {
try {
C3P0Utils.close(conn);
if (ps != null) {
ps.close();
}
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}
觉得有帮助的朋友请点个赞哦~~