最近做一个验证文件中的数据是否在数据库中存在的小验证,因为传到数据库中验证的只是两个字段而已,如: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();
// oracle限定的sql in 最大表达式数为 1000
// 否则将出现java.sql.SQLException: ORA-01795 的错误
//用设备号和导入时间来验证是否有相同的数据,将设备号拆开来in进去,减少与数据库的交互
if(size<1000){//值小于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);
//数组越界,说明i2+1000超过了list的size,到了list/1000的余数阶段
} catch (IndexOutOfBoundsException e) {
list2 = list.subList(i2, list.size());
}
i2 += 1000;
String str2=getBaseId(list2);//拼装SQL,到数据库中验证
if(StringUtil.isEmpty(str)){
str.append(str2);
}else{
str.append(",").append(str2);
}
}
}
return str;
}
分享到:
相关推荐
Oracle Sql语句转换成Mysql Sql语句java 源码,非常简单,只要给定源oracle sql语句地址,和生成目标文件地址运行即可。
Oracle sql语句大全. sql语句的优化资料
oracle Sql语句二 oracle Sql语句二
Oracle 常用 sql 语句 实用性
Oracle SQL语句性能优化
Oracle中SQL语句执行效率的查找与解决..
ORACLE SQL 语句(典型应用总结).pdf
Oracle SQL 语句优化53个规则详解
oracle常用SQL语句下载 oracle常用SQL语句下载 oracle常用SQL语句下载
Oracle学习,常用sql语句汇总,适合新手使用。
oracle中SQL语句优化
oracle、sql语句基础
一些常见的Oracle数据库的sql语句的总结,便于快速的复习Oracle语句。
Oracle——sql语句优化
对ORACLE-SQL进行一些布局优化,更新它的格式
Oracle数据库Sql语句详解大全,详细介绍oracle数据库的sql各种写法,非常适合初学者快速入门使用。
Oracle SQL语句跟踪
很全的oracle sql语句学习资料,从基础开始,逐层深入,让你成为sql高手