[原著]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控件,在视图 ...
随机推荐
- CTF 湖湘杯 2018 WriteUp (部分)
湖湘杯 2018 WriteUp (部分),欢迎转载,转载请注明出处! 1. CodeCheck(WEB) 测试admin ‘ or ‘1’=’1’# ,php报错.点击登录框下面的滚动通知,URL ...
- Food Log with Speech Recognition and NLP
1. 分词 word segmentation 国内有jieba 分词 2. Named Entity Recognition 训练自己的Model How can I train my own NE ...
- python的进程/线程/协程
1.python的多线程 多线程就是在同一时刻执行多个不同的程序,然而python中的多线程并不能真正的实现并行,这是由于cpython解释器中的GIL(全局解释器锁)捣的鬼,这把锁保证了同一时刻只有 ...
- 关于SQL的over partition by 开窗语句在分页和统计中的使用总
CREATE TABLE OrderInfo( ID INT IDENTITY(1,1) PRIMARY KEY, CustomerID INT NULL, TotalMoney DECIMAL(18 ...
- C++11 线程并发
并发 头文件<future> <thread> 高级接口 async().future<> future<int> result1; //int为fun ...
- 【Git】Git常见错误
错误1.fatal: refusing to merge unrelated histories 致命的:拒绝合并不相关的历史 原因:比如我本地分支是V1.0,我现在想要合并远程master分支上的内 ...
- spring4 注入参数
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.sp ...
- layer兼容性问题
一.Layer 弹出层在ie8错乱的解决办法 弹出层在火狐.谷歌.360极速模式.IE6下都能100%面积正常显示,但在IE8和360的兼容模式下只显示弹出层下半部分或右半部分的内容,在主页面加上: ...
- Nginx系列1:ubuntu16.04编译出适合自己的nginx服务器
1.下载nginx nginx官网:nginx.org tar.gz文件 解压缩命令: wget https://nginx.org/download/nginx-1.14.2.tar.gz #下载n ...
- ASP.NET MVC 4 从示例代码展开,连接默认SQL Server数据库
VS2013里面,点击菜单[视图]-[SQL server对象资源管理器],右键点击[SQL Server]节点,选择[添加SQL Server]自动生成. 这只是开始,可以让网上下载下来的例子运行出 ...