본문 바로가기
Web/기타

Spring(스프링)에서 와일드카드 사용법 : MYSQL LIKE '%?%'

by 머스타드 가오리 2020. 7. 31.

저 처럼 mybatis, ibatis를 사용하지 않는 분이 있으실 수도 있으니.. 올려봅니다..

스프링 백엔드에서 sql문을 작성하던 중, 에러가 났습니다.

참고로 저는 아래 "검색문자열"을 변수로 받습니다. 이후에 나오는 search_content라는 string 변수입니다.

 

sql = "SELECT * FROM TABLE1 WHERE column1 like '%?%';";

ps = conn.prepareStatement(sql);

ps.setString(1, "검색문자열");

rs = ps.executeQuery();

 

이런식으로 했는데 고정된 String이나 Int의 경우 잘 되던 것이 되지 않았습니다.

검색을 아무리 해봐도 모든 방법이 안 되고, mybatis나 ibatis에서는 like에서 %를 사용할 때 다른 문법이 있다고 했습니다.

그러나 저는 DB 다룰 때 따로 설정해둔 것도 없고 해서 정말 하루종일 뻘짓을 하다가 sql에 그냥 string만 쭉 넣어보았습니다.

 

sql = "SELECT * FROM TABLE1 WHERE column1 like '%검색문자열%';";

rs = ps.executeQuery();

 

근데 이렇게 하니 원하는 결과가 나오더라구요.. 그래서 저 문자열을 만들기 위해 갖은 노력을 다 했습니다.

근데 결국 뻘짓하다 찾은 최선의 방법이 다음과 같습니다.

 

//search_content는 검색할 문자열을 담은 string 변수입니다.

sql = "SELECT * FROM TABLE1 WHERE column1 like '%"+search_content+"%';";

rs = ps.executeQuery();

 

코드적으로 좋은 방법은 아닌 것 같고, mybatis나 ibatis같은 프레임워크를 사용하는 게 좋아보이지만 저는 임시적인 처치가 필요했기 때문에 이 방법을 택했습니다.

혹시 저 처럼 안되시는 분들은 우선 위의 방법을 시도해보시고, 후에 프레임워크를 적용해 아래의 문법을 참고해 작성하시는 것을 추천드립니다. 아래 자료의 출처는: https://roqkffhwk.tistory.com/128 [야근싫어하는 개발자] 입니다.

 

1. 오라클

ibatis : WHERE column1 LIKE '%'||#search_value#||'%'

mybatis : WHERE column1 LIKE '%'||#{search_value}||'%'

 

2. MS-SQL

ibatis : WHERE column1 LIKE '%'+#search_value#+'%'

mybatis : WHERE column1 LIKE '%'+#{search_value}+'%'

 

3. MYSQL

ibatis : WHERE column1 LIKE CONCAT('%',#search_value#,'%')

mybatis : WHERE column1 LIKE CONCAT('%',#{search_value},'%')

'Web > 기타' 카테고리의 다른 글

MME 웹 디자인 _ Moqups, SublimeText  (0) 2020.04.17