Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- python anaconda
- vscode python
- conda lib
- ubuntu setting
- ubuntu
- php
- live drawin
- ubuntu nginx
- 우분투 세팅
- aws s3 delete
- hls 연동
- mongo 명령어
- mongo 설치
- php pdf
- aws s3
- vscode anaconda
- ubuntu ffmpeg
- php encryption
- flask 세팅
- jstl list
- MySQL
- php pdf convert
- mongodb 명령어
- AWS
- s3
- ubuntu error
- flask 시작
- pypi 배포
- ubuntu docker
- php 암호화
Archives
- Today
- Total
인생을 바꾸는 기록
java.sql.SQLException: Prepared or callable statement has more than 2000 parameter markers. 본문
spring
java.sql.SQLException: Prepared or callable statement has more than 2000 parameter markers.
phantom03 2020. 1. 28. 16:56사용한 환경 : 전자정부프레임워크에 ibatis
문제)
파라미터가 2000개 넘어 가면 발생
<select id="lecture.select" parameterClass="java.util.Map" resultClass="ResultMap">
SELECT *
FROM
test
WHERE
1=1
<isNotEmpty property="r_idx">
AND r_idx IN
<iterate property="r_idx" open="(" close=")" conjunction=",">
#r_idx[]#
</iterate>
</isNotEmpty>
</select>
요래 썼는데 r_idx가 2000개 넘어 가서 에러 발생
자료수집)
검색 해본 결과 드라이버 문제로 검색됨
아래는 문제되는 jTDS 드라이버 소스
if (params != null && params.size() > 255
&& connection.getPrepareSql() != TdsCore.UNPREPARED
&& procName != null) {
int limit = 255; // SQL 6.5 and Sybase < 12.50
if (connection.getServerType() == Driver.SYBASE) {
if (connection.getDatabaseMajorVersion() > 12 ||
connection.getDatabaseMajorVersion() == 12 &&
connection.getDatabaseMinorVersion() >= 50) {
limit = 2000; // Actually 2048 but allow some head room
}
} else {
if (connection.getDatabaseMajorVersion() == 7) {
limit = 1000; // Actually 1024
} else if (connection.getDatabaseMajorVersion() > 7) {
limit = 2000; // Actually 2100
}
}
if (params.size() > limit) {
throw new SQLException(
Messages.get("error.parsesql.toomanyparams",
Integer.toString(limit)),
"22025");
}
}
해결방법)
아래처럼 controller 에서 반복문으로 2000개씩 잘라줌
if(listMap.size() > 0) {
for (int i = 0; i < listMap.size(); i++) {
r_idx.add(listMap.get(i).get("r_idx").toString());
if(i!=0 && i%1999 == 0){
commandMap.put("r_idx", r_idx);
seat.addAll(service.select(commandMap));
r_idx = new ArrayList<String>();
}else{
if((i+1) == listMap.size()){
commandMap.put("r_idx", r_idx);
seat.addAll(service.select(commandMap));
r_idx = new ArrayList<String>();
}
}
}
}
'spring' 카테고리의 다른 글
jsp jstl list (0) | 2020.01.28 |
---|---|
jsp jstl foreach 소스보기 빈칸 없애기 (0) | 2019.08.07 |
spring 뒤로가기 양식 다시 제출 확인 ERR_CACHE_MISS 문제 (2) | 2019.07.25 |