[ERROR] invalid character | List 데이터 DB 저장

zizi·2023년 6월 5일
0

오류 정리

목록 보기
5/6
post-thumbnail

상황

여러개의 List로 나오는 데이터를 DB에 저장하는 코드를 구현했다.
foreach문을 사용하여 구현될 코드를 구분하기 위해 세미콜론을 사용했다.

// xml mapper

 	<insert id="saveCrawlingData" parameterType="List">
	  <foreach collection="list" item="crawling" separator=";">
	    INSERT INTO m_crawling (crawlingseq, title)
	    VALUES (m_crawling_seq.NEXTVAL, #{crawling.title})
	  </foreach>
	</insert>

오류 메세지

### The error occurred while setting parameters
### SQL: INSERT INTO m_crawling (crawlingseq) VALUES (m_crawling_seq.NEXTVAL) ; INSERT INTO m_crawling (crawlingseq) VALUES (m_crawling_seq.NEXTVAL) ; INSERT INTO m_crawling (crawlingseq) VALUES (m_crawling_seq.NEXTVAL)
### Cause: java.sql.SQLSyntaxErrorException: ORA-00911: invalid character
; bad SQL grammar []; nested exception is java.sql.SQLSyntaxErrorException: ORA-00911: invalid character

원인

MyBatis는 세미콜론(;)을 쿼리 내에서 사용할 수 없어서 오류가 발생했다.

해결방법

List 형태로 받은 데이터를 객체 형태로 받아, 객체를 저장하는 코드를 구현했다.

for (int i = 0; i < count; i++) {
	Crawling crawling = crawlingDataList.get(i);
	crawlingDao.saveCrawlingData(crawling);
}
// xml mapper

	<insert id="saveCrawlingData" parameterType="Crawling">
		INSERT INTO m_crawling 
        	(crawlingseq, title)
        VALUES 
        	(m_crawling_seq.NEXTVAL, #{title})
	</insert>
profile
좋았다면 추억이고 나빴다면 경험이다.🍀

0개의 댓글