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

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

 

[原著]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
  

原文地址:https://www.cnblogs.com/ios9/p/8580360.html

时间: 2024-10-12 16:01:31

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

Java执行js代码

在做项目中有时候需要用到Java调用js文件执行相应的方法 在JDK1.6添加了新的ScriptEngine类,允许用户直接执行js代码. import org.junit.Test; import javax.script.Invocable; import javax.script.ScriptEngine; import javax.script.ScriptEngineManager; /** * @author ceshi * @Title: JunitTestJS * @Projec

React-umi-request动态刷新Token功能实现及node.js 代码逻辑

在Antd-pro里面,使用的是umi-request,为了实现动态刷新token,我使用了拦截器. 拦截器更新token有两种: 方法一:在请求发起前拦截每个请求,判断token的有效时间是否已经过期,若已过期,则将请求挂起,先刷新token后再继续请求. 优点: 在请求前拦截,能节省请求,省流量. 缺点: 需要后端额外提供一个token过期时间的字段 refreshTime :使用了本地时间判断,若本地时间被篡改,特别是本地时间比服务器时间慢时,拦截会失败. 方法二:拦截返回后的数据.先发起

使用Oracle SQL Developer报错:Unable to find a Java Virtual Machine

1.环境 win7 x64,oracle 11g r2,jdk6 x64 2.问题 第一次启动Oracle SQL Developer的时候会让我们填写java.exe的路径,我在jdk安装目录下的bin中找到了java.exe,但是填写以后报如下错误: 3.原因 oracle 11g中安装的Oracle SQL Developer是32位的,而我们现在给他指定的java.exe却是64位的,所以会出现这种错误. 4.解决方法 1)从网上下载Oracle SQL Developer x64,然后

本地java代码和javascript进行交互(java和js互调)

在android的开发过程中,有很多时候需要用到本地java代码和javascript进行交互.android对交互进行了很好的封装,在开发中我们可以很简单的用java代码调用webview中的js,也可以用webview中的js来调用本地的java代码,这样我们可以实现很多原来做不了的功能,比如点击网页上的电话号码后,手机自动拨打电话,点击网页中的笑话,自动发送短信等. 废话不多说,这次教程的目标如下 android 中的java代码调用webview里面的js脚本 webview中的js脚本

java中执行js代码

要在java中执行js代码,首先明白,java不支持浏览器本身的方法.支持自定义的js方法,否则会报错 先新建一个js文件:jsss.js 内容如下: function aa(a,b){ return a+b; } 然后在java中写代码: public class ZipTest { public static void main(String[] args) throws Exception { ScriptEngineManager manager = new ScriptEngineMa

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

http://blog.csdn.net/xzyxuanyuan/article/details/8062887 JDK1.6版添加了新的ScriptEngine类,允许用户直接执行js代码. 在Java中直接调用js代码 不能调用浏览器中定义的js函数,会抛出异常提示ReferenceError: “alert” is not defined.   package com.sinaapp.manjushri;  import javax.script.ScriptEngine;  import

java 脚本引擎Rhino执行js代码和文件

测试js脚本引擎 public class helloworld { public static void main(String[] args) throws Exception { //获得脚本引擎对象 ScriptEngineManager sem=new ScriptEngineManager(); ScriptEngine engine=sem.getEngineByName("javascript"); //定义变量,会存储到引擎上下文种,java和js都能取到 engin

在JSP中的java代码中调用js代码

out.println(str)方法就是在JSP服务端运行的时候把str输出到服务端返回给客户端的HTML页面 可以通过out.print()这种方式输出一段JS代码,这段JS代码先声明一个JS函数,声明结束后再调用一下这个方法. 例如: out.println("<script>function showMessage() {alert('set_afterlogin()');}</script>");//声明showMessage方法 out.println

如何防止eclipse工程Java代码或js代码打开而左边的目录却无法展开并定位

在eclipse加载了新的工程之后,找到了需要的js代码左侧的目录却无法像以前一样展开和定位 经过查询,是需要在目录框下面有一个链接编辑器,点击一下就可以了 点击之后即可展开并定位 原文地址:https://www.cnblogs.com/Bo-space/p/12267514.html