MySQL--使用C3P0连接池进行批量插入,删除,更新数据的实现

在我们实际开发中,肯定会遇到大批量的数据来进行入库操作。

如果不使用框架应该怎么进行数据的批量入库呢。

使用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();
			}
		}

	}

}
觉得有帮助的朋友请点个赞哦~~

猜你喜欢

转载自blog.csdn.net/stalin_/article/details/80585310
今日推荐