我们在项目中要用到批量删除的功能 ,我在项目中是这样写的:
String[] strArrayCheckIds = request.getParameterValues("checkid");
int iLength=strArrayCheckIds.length;
for(int i=0;i<iLength;i++){
//在这里我用执行了sql语句:delete from tablename where in=...的删除操作。
carService.delete(strArrayCheckIds[i]);
}
从以上可以看出,我的sql操作上放到for循环中的,也就是说如果我删除5条数据,那么,会连续执行5条sql的删除操作。
但是项目经理不让我那样写,说会影响效率,他让我用delete from tablename in(...)的方式来做。
以下是代码:
String petroId="0";
String[] strArrayCheckIds = request.getParameterValues("checkid");
int iLength=strArrayCheckIds.length;
for (int i = 0; i < iLength; i++){
petroId=petroId+","+strArrayCheckIds[i];
}
carPetroService.deleteByIds(petroId); //这里用delete from tablename where id in (....)的语法
return doList();
但是这种方法循环处理字符串,而用dele from tablname where id in(...)的语法来做的。但是这种sql的效率低啊。
哪种方法更好呢。效率上能差多少呢?
请高手指教!
------解决方案--------------------------------------------------------
------解决方案--------------------------------------------------------
carPetroService.deleteByIds( )
这个方法怎样实现的,你没有说
如果用拼sql的方法构造列表,一次执行,效率要高点,但是可能会导致列表过长异常。这个处理了就没事
如果是一个个的调用
carService.delete( )
那就跟你的没区别了
可以建议的是,在ado.net中,可以用
DbDataAdapter.ExecuteBatch()
方法来批量执行sql
在java中,可以用
PreparedStatement.executeBatch();