Caused by: org.xml.sax.SAXParseException; 요소 콘텐츠는 올바른 형식의 문자 데이터 또는 마크업으로 구성되어야 합니다.
이런 오류를 보신적이 있으신가요?
Mybatis사용중에 발생한 오류인데요.
많이 써왔지만 처음본 경우라 다소 당황스러웠습니다.
질문에 답이 있다고 문자 데이터 또는 마크업 구성이 잘못되었다는 뜻이라 생각하고 요리조리 알아봤습니다.
우선 오류가 난 쿼리 부분을 조금 보여드리자면 아래와 같습니다.
문법상으로 전혀 문제가 없고 잘 돌아가는 쿼리입니다.
JOIN을 위해서 B 테이블의 col_10이 STYLE이 아니고
A 테이블의 col_0과 같은 값을 B테이블의 col_0이 갖고 있는 로우들만 불러옵니다.
잘되는 쿼리는 이미 쿼리를 테스트해서 맞는데 무엇이 문제일까요?
원인은 바로 '같지 않다'를 의미하는 <>에 있었습니다.
<> 같지 않다의 의미를 가진 이 꺽쇠가 오류의 원인인 이유는 XML태그와 부등호가 같기 때문에 파싱을 하면서
이를 혼동하여 발생하는 것입니다.
때문에 따로 표기를 해야되는데 아래와 같은 형식으로 하시면 됩니다.
<![CDATA[]]> 절 안에 있는 내용은 전부 Parser에서 문자데이터로 인식하기 때문에 꺽쇠로 표기한 것을
parsing의 대상으로 인식하지 않는 것 때문에 이러한 방식으로 기술하는 것입니다.
사실 이 방법보다는 아에 꺽쇠를 안쓰는 비교연산자를 쓰는 것이 더 낫지 않은가 하는 생각도 듭니다.
하지만 대체할만 한 연산자가 별로 없는게 함정이지요..
<> 이 연산자를 대체할 것은 != 이것인데.. 다른 것은 더 알아봐야 할 것 같습니다.
이렇게 되면 비교연산자를 쓸때 xml의 parser의 눈치를 보게되는 것 때문에 아에 CDATA로 쿼리 전체를 감싸는 방법도 있습니다.
어떤 방법을 쓰시던 결과가 정상적으로 나오고 손에 익는다면 최고의 방법이겠지요?
'프로그래밍' 카테고리의 다른 글
html form 태그를 이용한 여러 데이터 넘기기 동작 (0) | 2015.08.06 |
---|---|
jquery checkbox 실렉터 selector 사용 정리 (0) | 2015.08.05 |
이클립스 우클릭 New 목록 바꾸기(custom) (2) | 2015.07.31 |
SQL sum()함수 사용시 특정 조건에(IF, CASE) 맞는 컬럼만 추출하여 합산하기 with GROUP BY (1) | 2015.07.27 |
[javscript/jquery/mybatis] 체크박스를 이용한 데이터 수집과 전송, mybatis의 foreach를 이용한 간단한 where절 만들기 (0) | 2015.07.14 |