注:本文出自:博主自己研究验证可行

 

[原著]java或者Js  代码逻辑来处理  突破 oracle  sql “IN”长度的极限的问题

   在很多的时候 使用 select  *  from  tab_name t where  t.id in (1,2…………1000) ;  的固定方式来查询数据的时候。会有一种这个情况出现:

则是 in 里面的内容 太长了; 而 oracle数据库支持的长度是 100个内容。

         那么对于这个情况该怎么办呢。其实是很简单的,in 本身就是  所有 内容的or查询。

         对于此的办法是:把in的里面的参数给拆分成很多个。

        具体实现如下:

1:java 代码的实现:

  1  public List stapleToCzgkzxNew(DaoFactory daoFactory,String orgType, List lstSource ,List lstVo_jjfl) throws SQLException, Exception {
2
3 List lstTarget = new ArrayList();
4
5 try {
6 /**
7 * 需要 进行 经济分类 辅助核算
8 */
9 List lstIds_jjfl = new ArrayList();
10 //取出 集合中的 id
11 if(lstVo_jjfl.size()>0){
12 Iterator itSource_jjfl = lstVo_jjfl.iterator();
13 while (itSource_jjfl.hasNext()) {
14 ZfpzVO vo = (ZfpzVO) itSource_jjfl.next();
15 lstIds_jjfl.add(String.valueOf(vo.getGk_zfpz_id()));
16 }
17 //---start 20180315 新增 -------目的:提高生成数据执行速度,按照凭证号来查询数据。取消掉相同数据的合并问题---------------------
18 //把 id 拼接成字符串 1,2,3,4,5,6
19 int listLentgh=lstIds_jjfl.size();
20 int intFalg=50;//in 里面包含值的阀值
21 List lsId=new ArrayList();//存放id字符串集合
22 String stra="";
23 for (int i=0;i<listLentgh;i++){
24 if(i%intFalg == 0 && i != 0 ){
25 lsId.add(stra);
26 stra="";
27 }
28 if(i%intFalg == 0 ){
29 stra = ""+lstIds_jjfl.get(i);
30 }else{
31 stra = stra+","+lstIds_jjfl.get(i);
32 }
33 if(i+1==listLentgh && ( listLentgh !=1 &&i%intFalg != 0)){
34 lsId.add(stra);
35 } else if(i+1==listLentgh && listLentgh ==1 && i%intFalg == 0 ){
36 lsId.add(stra);
37 }
38 }
39 //---end 20180315 新增 ----------------------------
40
41
42 //---start 20180315 修改 -------目的:提高生成数据执行速度---------------------
43 List Gkzfpz_jjflList =ZwvchCommonHelper.factory().getGkzfpz_jjflList(daoFactory, lsId,orgType);
44 }
45
46 //下面是拼接 sql 的逻辑处理
47
48
49 */
50 public List getGkzfpz_jjflList (DaoFactory daoFactory, List lstZfpzId,String orgType){
51 String strSQL ="select * from view_k3_zfzxz_zfpz v WHERE 1 = 1 ";
52 List<Map<String, Object>>lstZfpz = new ArrayList();
53
54 try {
55
56 if(lstZfpzId.size()>0) {
57 strSQL += " AND ( ";
58 for (int index=0 ;index <lstZfpzId.size();index ++) {
59 if(index == 0){
60 strSQL += " v.id in ("+lstZfpzId.get(index)+")";
61 }else {
62 strSQL += " OR v.id in ("+lstZfpzId.get(index)+")";
63 }
64
65 }
66 strSQL += ")";
67 }
68 log.info("_______国库支付中心账务:直接支付凭证 ___________strSQL="+strSQL);
69 lstZfpz = daoFactory.getDao().getJdbcTemplate().queryForList(strSQL);
70 for(int i=0;i<lstZfpz.size();i++){
71 lstZfpz.get(i).put("org_type",orgType);
72 }
73 log.info("_______国库支付中心账务:直接支付凭证 ___________查询结果="+lstZfpz.size()+";======:"+lstZfpz.toString()) ;
74
75 } catch (Exception e) {
76 e.printStackTrace();
77 }
78 return lstZfpz;
79 }
80

2:使用JS 的逻辑处理

  1             var rows=[];  2
3 rows = mainGrid.getSelections();
5 if(rows.length>0){
6 debugger;
7 var balance_type="";
8
12 var rowsLength=rows.length;
13 var intFalg=30;//in 里面包含值的阀值
14 var ids=[];//id拼接存放的合集
15 var str_id="";
16 for (var i=0;i<rowsLength;i++){
17 var row =rows[i];
18 if(i%intFalg == 0 && i != 0 ){
19 ids.push(str_id);
20 str_id="";
21 }
22 if(i%intFalg == 0 ){
23 str_id = ""+row.id;
24 }else{
25 str_id = str_id+","+row.id;
26 }
27 if(i+1==rowsLength && ( rowsLength !=1 &&i%rowsLength != 0)){
28 ids.push(str_id);
29 } else if(i+1==rowsLength && rowsLength ==1 && i%intFalg == 0 ){
30 ids.push(str_id);
31 }
32 }
33 }
34

[原著]java或者Js 代码逻辑来处理 突破 oracle sql “IN”长度的极限的问题的更多相关文章

  1. Java执行js代码

    在做项目中有时候需要用到Java调用js文件执行相应的方法 在JDK1.6添加了新的ScriptEngine类,允许用户直接执行js代码. import org.junit.Test; import ...

  2. java调用js代码

    jdk8里使用脚本引擎调用js 1.定义一个js方法: function getRouteInfo(province){ //注意,参数不要带var..在java里执行会报错.. if (provin ...

  3. 关于前段JS代码报错问题的解决方法

    最近接手别人的一个项目,项目导入到Myeclipse中,JS代码一直报错,说missing semicolon.该错误是Myeclipse在检查JS代码的过程出现的. 后来经过检查,发现JS代码本身没 ...

  4. 在Java中直接调用js代码(转载)

    http://blog.csdn.net/xzyxuanyuan/article/details/8062887 JDK1.6版添加了新的ScriptEngine类,允许用户直接执行js代码. 在Ja ...

  5. 在Java中直接调用js代码

    JDK1.6版添加了新的ScriptEngine类,允许用户直接执行js代码. 在Java中直接调用js代码 不能调用浏览器中定义的js函数,会抛出异常提示ReferenceError: “alert ...

  6. 在Java中执行js代码

    在某些特定场景下,我们需要用Java来执行Js代码(如模拟登录时,密码被JS加密了的情况),操作如下: ScriptEngineManager mgr = new ScriptEngineManage ...

  7. java中执行js代码

    要在java中执行js代码,首先明白,java不支持浏览器本身的方法.支持自定义的js方法,否则会报错 先新建一个js文件:jsss.js 内容如下: function aa(a,b){ return ...

  8. 如何在 js 代码中使用 jsp 标签或 Java 代码

    JSP 标签还是很方便的,比如 Struts.Spring 等提供给我们的 JSP 标签,可以用它们来获取变量或进行一些计算.比如 struts2 的 <s:url value="/a ...

  9. Android学习笔记_32_通过WebView实现JS代码与Java代码互相通信

    webview两种实现方法,覆盖onKeyDown()方法 缓存 WebSettings应用注意的几个问题 1.要实现JS代码与Java代码互相通信,需要通过Android的WebView控件,在视图 ...

随机推荐

  1. 多线程this逃逸

    this逃逸,  是指在构造函数返回之前,其它线程就持有该对象的引用,调用尚未构造完全的对象的方法,可能引发令人疑惑的错误,应该避免this逃逸事件的发生. this逃逸经常发生在构造函数中启动线程或 ...

  2. GoogleNet

    NET-IN-NET 采用net-in-net 结构(不使用传统线性卷积,使用Mlpconv) 采用全局均值池化来提高传统CNN 网络中最后全连接层参数过于复杂的特点.(全连接层造成网络泛化能力差,a ...

  3. 使用Hexo在github上搭建个人博客

    最近正好在学习前端开发,想着搭建一个属于自己的个人博客,把自己的技能树整理整理,温故而知新. 如果你有前端开发经验,那么搭建这样的博客就很简单了. 一 什么是Hexo     Hexo 是一个快速.简 ...

  4. core.net 创建coreclass 项目出现一些问题

    错误如下: Project CoreTest does not have a lock file. Please run "dotnet restore" to generate ...

  5. git常用命令(转载自用)

    转载自 阮一峰博客: http://www.ruanyifeng.com/blog/2015/12/git-cheat-sheet.html 一个码农博客: http://blog.gitor.org ...

  6. 第25月第11天 deeplearning.ai

    1.网易云课堂 深度学习工程师 点击进入课程地址(英文)(收费) 点击进入课程地址(中文)(免费) 第一门 神经网络和深度学习 第二门 改善神经网络 第三门 结构化机器学习项目 第四门 卷积神经网络 ...

  7. Linux和进程内存模型

    一.Linux和进程内存模型 jvm是一个进程的身份运行在linux系统上,了解linux和进程的内存关系,是理解jvm和Linux内存关系的基础. 硬件.系统.进程三个层面的内存之间的概要关系 1. ...

  8. P2P的原理和常见的实现方式

    参考资料:http://www.cppblog.com/peakflys/archive/2013/01/25/197562.html P2P实现的原理 首先先介绍一些基本概念:    NAT(Net ...

  9. 个人经验~mongo故障处理思路

    一 简介:mongodb 应该如何排查二 分析角度   linux 角度   1 硬件是否有问题 常见主板 raid卡 和raid磁盘组   2 综合指标 负载   uptime : 1min 5mi ...

  10. imooc-free

    前端性能优化-通用的缓存SDK 依赖项 1.在hosts文件中配置  127.0.0.1 http://cc.imooc.com   就可以直接访问 http://cc.imooc.com:3000 ...