2011-10-04 1 views
9

나는 이것에 처음 오 なり있다, 도와주세요.안드로이드 ormlite like() 함수가 작동하지 않습니다.

ormlite (열 이름, 값) 함수를 사용하려고하는데이 기능이 저에게 효과적이지 않습니다. 그러나 전체 텍스트를 테스트 할 때 "eq"기능처럼 작동합니다. 내 코드는

,

try { 
    QueryBuilder<MakeDTO, Integer> qb = makeDao.queryBuilder(); 
    qb.where().like("madeCompany", filterKey); 
    PreparedQuery<MakeDTO> pq = qb.prepare(); 
    return makeDao.query(pq); 
} catch (SQLException e) { 
    throw new AppException(e); 
} 

감사합니다.

답변

11

당신이 % 와일드 카드를 사용할 필요가 부분적인 일치를 수행하려는 경우, 당신은 정확히 문자열 'madeCompany'로 그것을 요구하고 매우 간단 등

public Where<T,ID> like(java.lang.String columnName, 
         java.lang.Object value) 
       throws java.sql.SQLException 
Add a LIKE clause so the column must mach the value using '%' patterns. 
Throws: 
java.sql.SQLException 

Where.like(java.lang.String, java.lang.Object)

29

이전 질문이지만 방금 해결 한 내용 (ORMLite의 설명서가 명확하지 않음). 쿼리 문자열의 어느 쪽이 임의의 수의 문자와 일치 할 수 있는지 ORMLite에 알리기 위해 쿼리 매개 변수를 "%"로 묶어야합니다.

예를 들어

, 당신이 당신의 쿼리가 당신의 문자열은 다음 사용 포함 된 madeCompany 일치 할 경우 : 캔 위

try { 
    QueryBuilder<MakeDTO, Integer> qb = makeDao.queryBuilder(); 
    qb.where().like("madeCompany", "%"+filterKey+"%"); 
    PreparedQuery<MakeDTO> pq = qb.prepare(); 
    return makeDao.query(pq); 
} catch (SQLException e) { 
    throw new AppException(e); 
} 
+1

아포스트로피도 추가해야합니다. qb.where(). ("madeCompany", " '%"+ filterKey + "%'"); –

+0

@ Justin : 코드 스 니펫을 보내 주셔서 감사합니다. 사실 나는 "B를 입력하면 먼저 B의 문자열을 표시 한 다음 B가 들어있는 문자열 (A로 시작 함에도 불구하고)을 표시해야합니다"와 같은 쿼리를 원합니다. 그것을위한 방법입니까? –

1

답변은 같은 쿼리 문제 해결을하지만 SQL 주입 위험이 있습니다. 'filterKey'의 값이 '이면 SQL이 SELECT * FROM XXX WHERE xxx LIKE'% '%'가되므로 SQLException이 발생합니다. 이 경우, 예를 방지하기 위해 SelectArg을 사용할 수

try { 
    String keyword = "%"+filterKey+"%"; 
    SelectArg selectArg = new SelectArg(); 
    QueryBuilder<MakeDTO, Integer> qb = makeDao.queryBuilder(); 
    qb.where().like("madeCompany", selectArg); 
    PreparedQuery<MakeDTO> pq = qb.prepare(); 
    selectArg.setValue(keyword); 
    return makeDao.query(pq); 
} catch (SQLException e) { 
    throw new AppException(e); 
} 

가 참조 :