哪位有时间帮我优化一下这个方法,因为执行完需要40秒左右

yesjoy 2007-01-27 03:41:47
参数 funcCodeList有80条记录是固定的
public void createProjFuncTest(Long projStaffId, List funcCodeList){
if (funcCodeList != null) {
int len = funcCodeList.size();
for (int i = 0; i < len; i++) {
Misfunc misfunc = (Misfunc) funcCodeList.get(i);
// 项目员工功能权限
ProjStaffFunc projStaffFunc = new ProjStaffFunc();
projStaffFunc.setFuncCode(misfunc.getMisfuncCode());
projStaffFunc.setProjStaffId(projStaffId);
// 创建项目员工的功能权限

Long projEmpFuncId = new Long(super.getNextIdFromSequence());
String sql = "insert into " + "\r\n" + " SYS_PROJ_STAFF_FUNC( "// 项目员工功能权限表
+ "\r\n" + " PROJ_EMP_FUNC_ID " + "\r\n" // 项目员工功能ID
+ " , PROJ_STAFF_ID " + "\r\n" // 项目员工ID
+ " , MISFUNC_CODE " + "\r\n" // 功能代码
+ " ) " + "\r\n" + "values( " + "\r\n" + " ? " + "\r\n"
+ " , ? " + "\r\n" + " , ? " + "\r\n" + " ) " + "\r\n";

Object[] value = new Object[] { projEmpFuncId,
projStaffFunc.getProjStaffId(), projStaffFunc.getFuncCode() };
getJdbcTemplate().update(sql, value);
}
}
}
...全文
306 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
fengmingjie 2007-01-31
  • 打赏
  • 举报
回复
可以考虑用存储过程去实现数据库的插入,然后在程序中调用存储过程
xunmi12 2007-01-31
  • 打赏
  • 举报
回复
新手发帖 乱说的啊

这快批处理没试过,但我刚做的东西直接用
insertrow都没这么慢的,应该把连接拿出去 做一次连接后 后边直接insert就可以了吧
ts2794 2007-01-31
  • 打赏
  • 举报
回复
up!
yanglei031 2007-01-27
  • 打赏
  • 举报
回复
两个办法
1.别在循环里面做数据库连结,可在再方法的参数中巴connection传进去
2.使用Statement的批处理机制
stm.addBatch();
stm.executeBatch();
Spring得JDBC模版也要看场合来用的,虽然在代码量上作了很大的精简,但有时性能方面却不能令人满意啊
iceman_009 2007-01-27
  • 打赏
  • 举报
回复
大部分时间应该消耗在数据库的更新上了吧, 把表主键贴一下

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧