批量操作的应用
public void add(Role bean) {
try {
// 插入角色sql
String sql = "insert into role values(null,?,?)";
Connection conn = ConnDB.getConn();
// 预处理声明,并且返回主键的结果 需要加上参数 Statement.RETURN_GENERATED_KEYS
PreparedStatement ps = conn.prepareStatement(sql,Statement.RETURN_GENERATED_KEYS);
ps.setString(1, bean.getRname());
ps.setInt(2, bean.getSort());
ps.executeUpdate();// 执行插入角色数据
// 取返回结果,里面有新生成的主键
ResultSet rs = ps.getGeneratedKeys();
int id = 0;
if (rs.next()) {
id = rs.getInt(1); // 取出主键
}
ps.close();
// 插入 角色和权限 关系 数据
sql = "insert into role_grante values (?,?)";
ps = conn.prepareStatement(sql);
// 循环批量插入数据到角色权限表中
int index = 0;
for (Grante grante : bean.getGrantes()) {
ps.setInt(1, id); // 设置角色ID
ps.setInt(2, grante.getGid());// 设置权限ID
ps.addBatch();// 增加批量操作设置
if (++index % 5 == 0)// 每5条执行一次插入操作
ps.executeBatch();// 批量操作
}
ps.executeBatch();// 批量操作
ConnDB.closeConn(conn);
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}