[原著]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
[原著]java或者Js 代码逻辑来处理 突破 oracle sql “IN”长度的极限的问题的更多相关文章
- Java执行js代码
在做项目中有时候需要用到Java调用js文件执行相应的方法 在JDK1.6添加了新的ScriptEngine类,允许用户直接执行js代码. import org.junit.Test; import ...
- java调用js代码
jdk8里使用脚本引擎调用js 1.定义一个js方法: function getRouteInfo(province){ //注意,参数不要带var..在java里执行会报错.. if (provin ...
- 关于前段JS代码报错问题的解决方法
最近接手别人的一个项目,项目导入到Myeclipse中,JS代码一直报错,说missing semicolon.该错误是Myeclipse在检查JS代码的过程出现的. 后来经过检查,发现JS代码本身没 ...
- 在Java中直接调用js代码(转载)
http://blog.csdn.net/xzyxuanyuan/article/details/8062887 JDK1.6版添加了新的ScriptEngine类,允许用户直接执行js代码. 在Ja ...
- 在Java中直接调用js代码
JDK1.6版添加了新的ScriptEngine类,允许用户直接执行js代码. 在Java中直接调用js代码 不能调用浏览器中定义的js函数,会抛出异常提示ReferenceError: “alert ...
- 在Java中执行js代码
在某些特定场景下,我们需要用Java来执行Js代码(如模拟登录时,密码被JS加密了的情况),操作如下: ScriptEngineManager mgr = new ScriptEngineManage ...
- java中执行js代码
要在java中执行js代码,首先明白,java不支持浏览器本身的方法.支持自定义的js方法,否则会报错 先新建一个js文件:jsss.js 内容如下: function aa(a,b){ return ...
- 如何在 js 代码中使用 jsp 标签或 Java 代码
JSP 标签还是很方便的,比如 Struts.Spring 等提供给我们的 JSP 标签,可以用它们来获取变量或进行一些计算.比如 struts2 的 <s:url value="/a ...
- Android学习笔记_32_通过WebView实现JS代码与Java代码互相通信
webview两种实现方法,覆盖onKeyDown()方法 缓存 WebSettings应用注意的几个问题 1.要实现JS代码与Java代码互相通信,需要通过Android的WebView控件,在视图 ...
随机推荐
- 【bzoj 2527】[Poi2011]Meteors
Description Byteotian Interstellar Union (BIU) has recently discovered a new planet in a nearby gala ...
- super 的用法
通过用static来定义方法或成员,为我们编程提供了某种便利,从某种程度上可以说它类似于C语言中的全局函数和全局变量.但是,并不是说有了这种便利,你便可以随处使用,如果那样的话,你便需要认真考虑一下自 ...
- 第25月第7天 聚宽 svm
1. # 克隆自聚宽文章:https://www.joinquant.com/post/2709 # 标题:基于SVM的机器学习策略 # 作者:走得很慢的海龟 import math import n ...
- python网络编程初识
一,什么是计算机网络: 计算机网络是指将地理位置不同的具有独立功能的多台计算机及其外部设备,通过通信线路连接起来,在网络操作系统,网络管理软件及网络通信协议的管理和协调下,实现资源共享和 [1] 信 ...
- JavaScript中Float类型保留两位小数
JavaScript中Float类型保留两位小数 核心方法: num:要操作的数字 size:要保留的位数 parseFloat(num).toFixed(size); 实现代码如下:var ...
- 允许长单词、数字、URL换行到下一行
CSS3 word-wrap 属性 normal 只在允许的断字点换行(浏览器保持默认处理) break-word 在长单词.数字.URL地址内部进行换行 页面效果图: 源码:
- Python基础1(2017-07-16)
先墨守常规写一个简单的hello world!这是所有语言学习的第一点. Python Hello world name="hello world!" print(name) 如上 ...
- 为什么python运行的慢
最近在leetcode刷题,明显的注意到同样的算法,python运行的要慢的多,查资料得到python运行的慢主要原因如下: 一.动态类型导致运行速度慢,在北邮人论坛里面的这篇帖子中有较为详细的解释, ...
- 【转】简单谈谈python的反射机制
[转]简单谈谈python的反射机制 对编程语言比较熟悉的朋友,应该知道“反射”这个机制.Python作为一门动态语言,当然不会缺少这一重要功能.然而,在网络上却很少见到有详细或者深刻的剖析论文.下面 ...
- 如何在 Linux 中查看进程占用的端口号【转】
对于 Linux 系统管理员来说,清楚某个服务是否正确地绑定或监听某个端口,是至关重要的.如果你需要处理端口相关的问题,这篇文章可能会对你有用. 端口是 Linux 系统上特定进程之间逻辑连接的标识, ...