针对oracle中in操作超过1000个参数 会抛异常 处理实例
来源:互联网 发布:苹果7蜂窝移动数据设置 编辑:程序博客网 时间:2024/06/06 17:30
1.先贴一个工具类OracleSQUtils,此类目的是为了将数千个参数,按指定等分切片,最后用or进行拼接sql。
/** * 将千条参数切成等分拼sql查询,提高查询效率 * @author Fantasy */public class OracleSQUtils { /** * @param ids 存储多个id的List集合 * @param count 将多个id按count切成等分拼接 * @param field 数据库表对应字段 * @return 返回拼接语句 如 id in (1,2,3....1000) or id in (1001,1002,1003....2000) or .... */ public static String getOracleSQLIn(List<?> ids, int count, String field) { count = Math.min(count, 1000); int len = ids.size(); int size = len % count; if (size == 0) { size = len / count; } else { size = (len / count) + 1; } StringBuilder builder = new StringBuilder(); for (int i = 0; i < size; i++) { int fromIndex = i * count; int toIndex = Math.min(fromIndex + count, len); //System.out.println(ids.subList(fromIndex, toIndex)); String productId = StringUtils.defaultIfEmpty(StringUtils.join(ids.subList(fromIndex, toIndex), "','"), ""); if (i != 0) { builder.append(" or "); } builder.append(field).append(" in ('").append(productId).append("')"); } return StringUtils.defaultIfEmpty(builder.toString(), field + " in ('')"); }}
2.mybatis中sql的xml文件写法配置:
<select id="querySomeInfoByIds" resultType="HashMap" parameterType="HashMap">select dept_id,dept_name from dept awhere 1=1<!--优化前:基于oracle数据库做in查询时,下面的通常写法,当deptIds达到1000个以上时,oracle会报错 --><if test="deptIds!= null"> AND a.DEPT_ID IN <foreach item="item" index="index" collection="deptIds" open="(" separator="," close=")"> #{item} </foreach> </if><!-- 优化后:将传入的多个id在业务代码中按适当等分拼接好传入mybatis文件中,提升查询效率和避开超过1000个id时oracle数据库抛异常 -->and ( ${deptIds} )<!-其它普通参数-><if test="param!= null and param!= ''"> AND a.param =#{param}</if>....</select>
3.业务代码处理参数如下:
//deptIdList 中存储数千个deptIdString deptIds=OracleSQUtils.getOracleSQLIn(deptIdList,1000,"a.DEPT_ID");HashMap<String,Object> params=new HashMap<String,Object>();params.put("deptIds",deptIds);List<HashMap<String,Object>> resultList=deptService.querySomeInfoByIds(params);
阅读全文
0 0
- 针对oracle中in操作超过1000个参数 会抛异常 处理实例
- Oracle数据库中IN参数个数超过1000的问题
- Oracle中IN参数个数超过1000的解决方案
- Oracle查询中IN参数超过1000的解决方法
- oracle数据库查询语句in后面的参数个数超过1000的处理方式
- 关于oracle in后的参数个数超过1000问题
- 关于oracle in后的参数个数超过1000问题
- SQL使用IN超过1000个条件的处理
- 解决Oracle in 超过1000个问题 C#拼接字符串
- 处理 Oracle SQL in 超过1000 的解决方案
- JAVA 处理 Oracle SQL in 超过1000 的解决方案
- oracle中in的个数超过1000的解决办法
- Oracle中异常处理
- Oracle in超过超过1000的解决方案(JAVA版本)
- IO流_JDK7针对多个异常的处理方案
- oracle in 超过1000 ,mybatis实现
- oracle条件参数中 IN函数中的值最大只能为1000个
- 解决Orcale in超过1000个时出现“”列表中的最大表达式数为 1000”这个异常的问题
- windows10下使用idea远程调试hadoop集群
- 用Word编辑一个长文档时如何有层次感让文字看起来有条理性
- SDWebImage加载图片添加淡入淡出动画
- 《深入理解Java虚拟机》读书笔记
- Leetcode题解-561. Array Partition I
- 针对oracle中in操作超过1000个参数 会抛异常 处理实例
- 可信计算技术理论与应用研究概述
- js实现生成一个指定长度为n且随机不重复的数组
- jqGrid自适应展示不同列数
- 在Notepad++中使用正则表达式替换文本
- 关于recycleView的java.lang.IllegalArgumentException异常问题
- layer的prompt弹出框,点击回车,触发确定事件
- SAP技术总结
- HashMap源码分析(1.7.0_80)