Java 解决oracle in 条件 不能大于1000的问题

工具类:SqlInConditionStringUtil
其中:getOracleSQLIn方法适合单一SQL语句
getOracleSQLIn方法适合嵌套SQL语句

public static String getOracleSQLIn(List<String> ids, int count, String field) {
count = Math.min(count, 1000);
int len = ids.size();
int size = len % count;
if (size == 0) {
size = len / count;
} else {
size = (len / count) + 1;
}
StringBuilder builder = new StringBuilder();
for (int i = 0; i < size; i++) {
int fromIndex = i * count;
int toIndex = Math.min(fromIndex + count, len);
String productId = StringUtils.defaultIfEmpty(StringUtils.join(ids.subList(fromIndex, toIndex), "','"), "");
if (i != 0) {
builder.append(" OR ");
}
builder.append(field).append(" IN ('").append(productId).append("')");
}
return StringUtils.defaultIfEmpty(builder.toString(), field + " IN ('')");
}
public static String getOracleSQLIn(List<String> ids, int count, String field, boolean flag) {
count = Math.min(count, 1000);
int len = ids.size();
int size = len % count;
if (size == 0) {
size = len / count;
} else {
size = (len / count) + 1;
}
StringBuilder builder = new StringBuilder();
for (int i = 0; i < size; i++) {
int fromIndex = i * count;
int toIndex = Math.min(fromIndex + count, len);
String productId = StringUtils.defaultIfEmpty(StringUtils.join(ids.subList(fromIndex, toIndex), "','"), "");
if (i != 0) {
builder.append(" OR ");
}
if(flag == true)
{
builder.append(field).append(" IN (").append(productId).append(")");
}
}

return StringUtils.defaultIfEmpty(builder.toString(), field + " IN ('')");
}


方法调用:

/**
* @Title: getInConditionValue
* @Description: 获取oracle in 条件串
* @param @param fieldName
* @param @param value
* @param @return
* @return String
* @throws
*/
private String getInConditionValue(String fieldName, String value) {
// 初始化返回值
StringBuffer inConditionSql = new StringBuffer();
if(value != null && !"".equalsIgnoreCase(value)) {
// 登记机关查询条件
inConditionSql.append("(");
inConditionSql.append(SqlInConditionStringUtil.getOracleSQLIn(Arrays.asList(value.split(",")), 1000, fieldName));
inConditionSql.append(")");
}
return inConditionSql.toString();
}

查询条件添加:
if(marPlaConditionInfoBean.getIndCodeStr() != null
&& !"".equalsIgnoreCase(marPlaConditionInfoBean.getIndCodeStr())) {
// 添加行业代码查询条件
sql.append(" AND ");
sql.append(getInConditionValue("INDUSTRYCO", marPlaConditionInfoBean.getIndCodeStr()));
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值