[原著]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控件,在视图 ...
随机推荐
- 第28月第23天 lineFragmentPadding
1.lineFragmentPadding https://blog.csdn.net/lwb102063/article/details/78748186
- Hbase思维导图之物理模型
- Centos 04 基础系统优化命令
在Linux这个系统当中,几乎所有的硬件设备文件都在/dev这个目录内.举例来说,IDE介面的硬盘的文件名称即为/dev/hd[a-d],其中, 括号内的字母为a-d当中的任意一个,亦即有/dev/h ...
- 前端开发者不得不知的es6十大特性(转)
转载自AlloyTeam:http://www.alloyteam.com/2016/03/es6-front-end-developers-will-have-to-know-the-top-ten ...
- Object的wait/notify/notifyAll&&Thread的sleep/yield/join/holdsLock
一.wait/notify/notifyAll都是Object类的实例方法 1.wait方法:阻塞当前线程等待notify/notifyAll方法的唤醒,或等待超时后自动唤醒. wait等待其实是对象 ...
- openstack Q版部署-----nova服务配置-控制节点(5)
一.创建数据库(控制节点) 创建数据库以及用户: CREATE DATABASE nova_api; CREATE DATABASE nova; CREATE DATABASE nova_cell0; ...
- RabbitMQ简单应用の消息持久化
消息应答: 消息应答默认是打开的(false) boolean autoAck = true;自动确认模式,表示一旦MQ将消息给到消费者,就会从内存中删除该条消息,这种情况下,如果杀死正在执行的消费者 ...
- 2017-2018-2 20165221 实验三《敏捷开发与XP实践》实验报告
实验报告封面 姓名:谭笑 学号:20165221 班级:1652班 实验名称: JAVA--敏捷开发与XP实践 指导老师:娄嘉鹏 试验时间:15:35--17:15 实验性质:选修 实验组次:21 实 ...
- Java基础5-接口
昨日内容回顾 jvm参数设置 -Xmx //设置最大堆大小 java -Xmx512m Classname -Xms //设置初始堆大小 java -Xms24m Classname -Xss //设 ...
- WinRAR代码执行漏洞CVE-2018-20250
0x01 分析思路 利用https://github.com/googleprojectzero/winafl 漏洞分析框架模糊测试WinRAR. 几个存档格式的崩溃,例如RAR,LZH和ACE,这些 ...