最近做一个验证文件中的数据是否在数据库中存在的小验证,因为传到数据库中验证的只是两个字段而已,如:select t.id from table where to_char(t.import_date,'yyyy-MM-dd')=#importDate# and t.device_no in ($deviceNo$),importDate字段是固定的,deviceNo字段是变化的.而在oracle中,SQL的in的内容是有限制的,只能1000个传入值,而导入文件中,就可能有上万条记录,如果一条一条地验证,将有上万次与数据库的交互.所以想到了按照1000值来拆分和拼装SQL.
-
- @Override
- public String checkKJLIndexExcel(List<KJLIndexImportDateModel> list)
- throws Exception {
- int size=list.size();
- StringBuffer str=new StringBuffer();
- if(size<1000){
- str=getBaseId(list);
- }else{
- int i2=0;
- for(int i=0;i<(size/1000)+1;i++){
- List list2 = null;
- try {
- list2 = list.subList(i2, i2 + 1000);
- } catch (IndexOutOfBoundsException e) {
- list2 = list.subList(i2, list.size());
- }
- i2 += 1000;
- String str2=getBaseId(list2);
- if(StringUtil.isEmpty(str)){
- str.append(str2);
- }else{
- str.append(",").append(str2);
- }
- }
- }
- return str;
- }