아이폰어플

아이바티스-한구문에 insert,update같이 들어간경우 에러날때 해결방법

세피롯스 2010. 2. 24. 17:44
아래처럼 if문을 써서 값이 존재하지않으면 insert처리를 존재하면 update처리를 하는 쿼리를 만들었는데
실제 동작시키니 에러가 떳다...
------------------------------------------------------------------------------------------
<insert  id="abcinsert" parameterClass="abcDTO">
<![CDATA[
if not exists(select * from schedule_info_tbl where convert(datetime, scDate,120) = convert(datetime, #scDate#,120))

begin

 insert into schedule_info_tbl($objName$,scDate,position)
 values(#textVal#, convert(datetime, #scDate#,120), #position#)
end
else
begin
 update schedule_info_tbl
 set $objName$ = #textVal#,
     position = #position#
 where convert(datetime, scDate,120) = convert(datetime, #scDate#,120)

end
]]>
</insert>
------------------------------------------------------------------------------------------

요 <insert> 이걸로 쓰는데 에러가 났다...

----------에러메세지--------
com.ibatis.dao.client.DaoException: Failed to execute queryForObject - id [scheduleSave], parameterObject [schedule.dto.ScheduleDTO@2ac57c].  Cause: java.sql.SQLException: Insert statements cannot be executed as a query.
Caused by: java.sql.SQLException: Insert statements cannot be executed as a query.


봤더니 dao쪽에 아무생각없이queryForObject를 썼는데 이게 다른건 상관없지만
xml에 <insert>로 선언하고 내용에 위에처럼 insert도 있고update도 있으면  에러가 나온다.

그래서 dao에 queryForObject대신
this.insert("abcInsert",abcDTO);  <== 이렇게 바꾸니까 된다ㅎㅎㅎ

정확한 원인분석은 못해서 왜그런건지 궁금하지만 시간관계상 패스;;;