이시우
101
2021-06-09 11:34:12
9
246

mybatis이용해 게시판을 만들어보고 있는데 sql문에 계속 오류가 발생해서 여쭤봅니다



<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
  PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
  "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="FreeboardData"> 

<select id="getCountSD" resultType="int" parameterType="String">
	select count(*) from freeboardData where ${option} like  '%${search}%'
</select>	

</mapper>

$를 이용해서 작성하면 ' ' 없이 쿼리문 작성이 가능하다는 글을 읽고 이렇게 해보았는데


콘솔창에 오류메세지가 
select count(*) from freeboardData where (ì œëª©) like '%3%'

이렇게 출력이됩니다.

게시판에 검색기능을 추가해보고자 넣은건데 쿼리오류로 게시판에 접근할때부터 오류메세지가 나와서

3도 입력한 값이 아닙니다. 


근데 컬럼명이 애초에 영어로 못 넘어가고 깨지는거 같아 문제같습니다.


<select id="getCountSD" resultType="int" parameterType="String">
	select count(*) from freeboardData where ${option} like  '%' || #{search} || '%'
</select>


이렇게 고쳤을때는 화면은 넘어가는데, 검색시도시

Sql = select count(*) from freeboardData where ì œëª© like  '%' || :1  || '%'

이렇게 콘솔창에 나옵니다. ( 검색한 값은 3이였습니다. )




오류 메세지는 두 경우 모두 Error Msg = ORA-00911: invalid character


이렇게 나옵니다.

어느 곳을 봐봐야 할까요 ㅠㅠ

0
  • 답변 9

  • 르브론제임스234
    399
    2021-06-09 11:43:09

    parameterType 스트링이 아니라 값을 전달할 객체로 바꿔주세요

  • 제리뿅
    131
    2021-06-09 11:46:06

    parameterType이 잘못되어있는거 같은데요?

    보통 VO로 넘겨받으면 저렇게 변수명을 사용하지만

    String을 넘겨받으면 param1, param2로 사용합니다.

  • 이시우
    101
    2021-06-09 11:53:31

    아!!!!!! 감사합니다 ㅠㅠㅠㅠㅠ


    근데도 option 이 영어로 제대로 안넘어가네요 ㅠㅠ

    	public static int getCounSD(String search, String option) {
    		SqlSession mapper = sqlFactory.openSession();
    
    		Map<String,String> map= new HashMap<>();
    		map.put("search", search);   //key,value 한 쌍으로 저장
    		map.put("option", option);
    		
    		int cnt = mapper.selectOne("getCountSD",map);
    		mapper.close();
    		return cnt;
    	}

    이게 DAO라서

    파라미터 타입을


    <select id="getCountSD" resultType="int" parameterType="java.util.HashMap">
    	select count(*) from freeboardData where ${option} like  '%${search}%'
    </select>	

    이렇게 고쳤더니


    Sql = select count(*) from freeboardData where ì œëª© like  '%2%'


    이렇게 오류창에 나옵니다 이번에 숫자2는 입력한 값이 맞아요 바꿔가면서 해봤습니다 오..50%의 진척이 있네요 ㅠㅠㅠ


    클린하고 재가동도 해보았는데 왜 option은 못 가져올까요 ㅠㅠ

  • 제리뿅
    131
    2021-06-09 11:59:36
    	public static int getCounSD(String search, String option) {
    		SqlSession mapper = sqlFactory.openSession();
    		
    		int cnt = mapper.selectOne("getCountSD",option, search);
    		mapper.close();
    		return cnt;
    	}

    <select id="getCountSD" resultType="int" parameterType="String">
    	select count(*) from freeboardData where ${param1} like  '%${param2}%'
    </select>	
  • 이시우
    101
    2021-06-09 12:08:17

    제리뿅님 감사합니다! 근데 selectOne가 똑같이 기재했을때 빨간줄이 나옵니다 ㅠㅠ

    select로 변경해봐도 빨간줄이 나와서


    파라미터 여러개를 넣는 법을 검색해보고있는데 잘못찾고있어서 방법을 모르겠습니다 ㅠㅠㅠ


    말씀해주신방법을 해보고싶은데 ㅠㅠㅠㅠ

  • 성능최적화계획
    777
    2021-06-09 12:35:30
    SqlSession 클래스 보면 파람은 단일일 겁니다.
  • 크라
    123
    2021-06-09 13:26:17

    호.. 요즘에 $써도 되나요? 소스코드 보안 때문에 안되는걸로 알거든요.

  • 이시우
    101
    2021-06-09 13:38:35

    아직 국비과정 수강생이라..보안은 고려해보고있진 않았습니다 ㅠㅠ 


    실행을 시키고 싶은데 다른 방법을 찾아봐야겠네요..


    강사님은 그냥 본인코드 복붙만 말씀하시고..하 ㅠㅠ

  • 이시우
    101
    2021-06-09 17:56:46

    해결했습니다ㅏㅏㅏㅏㅏㅏㅏㅏㅏㅏㅏ  적어놓은 부분에서 파라미터 타입제외하고는 문제가없었고


    컨트롤러에 값가져오는데서 문제가 있었습니다 ㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠ


    와 이걸로 하루종일 뺏길줄이야 ㅠㅠㅠㅠㅠ

  • 로그인을 하시면 답변을 등록할 수 있습니다.