/**
* 处理where in 里面的数据。当where in 里面的参数值超过一定数量时,把它分开来处理。如oracle in
* 里面的参数超出1000条数据将报错,此方法可以处理之. 形式如:select * from table1 where ID in
* (1,2,3,4,...,1000) union all select * from table1 where ID in
* (1001,1002,...)
*
* @param orgSql
* 原始的sql语句
* @param paramCode
* 参数代码 如user表的user_id
* @param paramValue
* 参数值
* @param splitNum
* 当in 里面的参数值达到多少条时就分割,如oracle达到1000就必须分割,所以就用1000
* @return 返回 分割后的sql
* @author wuzy
*/
public static String setWhereInArray(String orgSql, String paramCode,
String paramValue, int splitNum) {
String paramArray[] = paramValue.split(",");// in里面全部的参数值找出来,保存到数组中
int inArrayNum = paramArray.length % splitNum == 0 ? paramArray.length / splitNum : paramArray.length / splitNum + 1;// 参数值一共能分割成多少组,记录总组数
int m = 0;// 用来记录参数值数字的下标值
int b = 0;// 用来记录参数值数组和sql片段,能分出多少个参数值片段就能分割成多少个sql片段
int n = splitNum;// 用来记录参数值数字下标值的步长,步长的长度等于需要分割的数量,如要1000
String p[] = new String[inArrayNum];// 分割的参数值片段数组
String sql[] = new String[inArrayNum];// 分割的sql片段数组,如:select * from
// table1 where ID in
// (1,2,3,4,...,1000),整条sql把sql片段用union
// all连起来
for (int k = 0; k < paramArray.length; k++) {
if (b < inArrayNum) {
p[b] = "";
for (; m < n; m++) {
if (m >= paramArray.length) {
break;
}
p[b] += paramArray[m] + ",";
}
p[b] = p[b].substring(0, p[b].lastIndexOf(","));
sql[b] = orgSql.replaceAll("<%\\s*" + paramCode + "\\s*%>",p[b]);
b++;
n += splitNum;
}
}
String newSql = "";// 分割连接后的sql
for (int q = 0; q < sql.length; q++) {
newSql += sql[q] + " union all ";
}
newSql = newSql.substring(0, newSql.lastIndexOf(" union all "));
return newSql;
}
分享到:
相关推荐
### Oracle SQL IN 子句超过1000个值的处理方法 在Oracle数据库中,当我们需要使用SQL的IN子句来匹配一个包含超过1000个值的列表时,会遇到一个问题:Oracle默认限制了IN子句中的元素数量不能超过1000个。这主要是...
在Java编程中,与Oracle数据库进行交互是常见的需求,尤其是当需要执行复杂的业务逻辑时,我们通常会使用Oracle存储过程。存储过程是预编译的SQL语句集合,它可以提高性能,封装复杂逻辑,并减少网络通信量。本教程...
在Oracle数据库系统中,有时我们需要将Java代码集成到PL/SQL程序中,以便利用Java的强大功能,例如处理复杂的算法、大数据操作或者与外部系统交互。本文将详细介绍如何在Oracle中调用Java包,并探讨相关知识点。 一...
Oracle数据库提供了丰富的存储过程功能,使得开发者可以编写自定义的SQL逻辑,结合Java调用来实现复杂的数据处理。本教程将深入探讨如何在Java中调用Oracle存储过程来执行分页查询。 首先,我们需要理解分页的基本...
在上述Java代码中,我们首先创建一个CallableStatement对象并设置参数,然后注册输出参数为OracleTypes.CURSOR。执行存储过程后,通过getObject方法获取Cursor,然后遍历ResultSet处理返回的数据。 总结一下,Java...
### Java代码常用技巧:Oracle数据库表操作返回值处理方法 #### 概述 在实际的软件开发工作中,处理数据库查询结果是一项常见的任务。本篇主要介绍如何利用Java语言结合Oracle数据库进行表操作,并通过示例代码...
se();}if(stmt != null){stmt.close();}if(conn != null){conn.close();...此外,对于存储过程的错误处理,通常需要在Oracle存储过程中添加异常捕获和处理机制,以便在Java调用时能够得到清晰的错误信息。
### Java调用Oracle存储过程与分页示例详解 #### 一、无返回值的存储过程调用 在Java中调用Oracle存储过程时,若该过程无返回值,主要利用`CallableStatement`对象来执行。以下是一个具体的示例: ##### 存储过程...
三:返回列表的存储过程 存储过程可能如下: CREATE OR REPLACE PROCEDURE TESTC(PARA1 IN VARCHAR2, PARA2 OUT SYS_REFCURSOR) AS BEGIN OPEN PARA2 FOR SELECT I_ID, I_NAME FROM TESTTB WHERE I_ID LIKE PARA1 ||...
### Oracle + jdbcTemplate + Spring + Java + Flex 实现分页 #### 一、Oracle存储过程分页 在Oracle数据库中,为了实现高效的分页查询,通常会采用存储过程的方式来完成。这种方式能够有效地减少网络传输的数据量...
#### Java代码实现 接下来,在Java Web应用中调用上述存储过程并获取查询结果。 ```java String sql = "{call root.getAreas(?)}"; CallableStatement cste = con.prepareCall(sql, java.sql.ResultSet.TYPE_SCROLL_...
总结,Java调用Oracle存储过程的关键在于使用`CallableStatement`,根据存储过程的参数类型,正确地设置IN、OUT或IN/OUT参数。同时,别忘了在操作完成后关闭所有数据库资源,以避免资源泄漏。在实际应用中,可能还...
下面是使用 Spring jdbcTemplate 调用 Oracle 存储过程返回 List 集合的 Java 代码: ```java package com.zc.test; import java.sql.CallableStatement; import java.sql.ResultSet; import java.sql....
在这个Java代码示例中,我们连接到数据库,创建一个`CallableStatement`实例,设置输入参数,注册输出参数,然后执行存储过程。最后,我们读取输出参数的值并打印出来。 `dba.rar`可能是一个包含数据库管理相关脚本...
Oracle数据库系统提供了高效的数据存储、管理和处理能力,支持复杂的事务处理和数据仓库应用。本学习笔记结合了代码示例,将帮助你深入理解和掌握Oracle的核心功能以及相关的编程技术。 1. Oracle常用语句 Oracle ...
本文介绍了如何使用Java调用Oracle数据库中的存储过程,并通过具体的代码示例进行了说明。通过这种方式,可以有效地利用Oracle的强大功能,并提高Java应用程序的数据处理能力。无论是简单的数据插入还是复杂的查询...
`InExpression.java`可能是Hibernate内部实现`IN`操作的类,它包含了处理`IN`表达式逻辑的代码。这个类通常在Hibernate的源码中被用来构建和解析`IN`查询。 总的来说,这篇文章可能会深入探讨如何使用Hibernate的...
在上述Java代码中,`registerOutParameter`方法用于指定输出参数的位置(从1开始计数)和数据类型。执行`proc.execute()`后,可以通过`getString`或其他相应的方法来获取输出参数的值。 总结来说,Java调用Oracle...
在Java编程中,调用Oracle数据库的存储过程是一项常见的任务,尤其在处理复杂业务逻辑时。Oracle存储过程允许我们封装SQL语句和其他PL/SQL代码,以提高性能和可维护性。以下是对如何在Java中调用Oracle存储过程的...