2012-06-04 2 views
1

안드로이드 검색 대화 상자가 올바르게 작동하는 곳에 3 열의 DB가 있습니다. 그러나 두 개의 다른 열에서 작업이나 구를 입력하고 검색된 구가 하나 또는 다른 열 또는 두 열 모두에있는 모든 결과를 반환 할 수 있기를 바랍니다. "안녕"은 "안녕 얘들 아"반환안드로이드 검색 다이얼로그로 두 개 이상의 DB 컬럼 검색하기

COL1  COL2  COL3 
______________________ 

Hi  there guys 
how  are  you 

당신이 검색 한 :

//--- GET RECORDS FOR SEARCH 
public Cursor searchDB(String query) { 
return db.query(true, DB_TABLE, new String[] { KEY_ROWID, KEY_COLUMN1, KEY_COLUMN2, 
KEY_COLUMN3 }, KEY_COLUMN1 + " LIKE" + "'%" + query + "%' OR " + KEY_COLUMN2 + 
" LIKE" + "'%" + query + "%' OR " + KEY_COLUMN3 + " LIKE" + "'%" + query + "%'", 
null, null, null, null, null); 
} 
//--- END Get Records for Search 

이 같은 DB를 그래서 만약 이것이 잘 작동 : 나는 아래의 방법을 사용하고 있습니다. 그러나 내가하고 싶은 것은 "안녕하세요"를 검색하고 3 열의 전체 행을 반환하도록합니다 - "안녕하세요". 추가 시도 :

OR "+ KEY_COLUMN2 + KEY_COLUMN3 + " LIKE" + "'%" + query + "%'" 

그러나 검색을 실행할 때 검색이 중단됩니다.

답변

1

데이터베이스를 쿼리하기 전에 하나 더 단계를 적용해야한다고 생각합니다.

query 문자열을 단어 배열로 분할해야합니다.

그런 다음 솔루션은 쿼리의 말씀을 전달하는 selectionArgs에게 매개 변수를 사용하는 것입니다 :

이 이전의 문제는 당신이 (내가 해본 적이 세 단어를 가정하고있다
String[] queryWords = splitInWords(query); // your own method to split a string in words 
db.query(true, DB_TABLE, new String[] { KEY_ROWID, KEY_COLUMN1, KEY_COLUMN2, KEY_COLUMN3 }, 
KEY_COLUMN1 + " LIKE" + " ? OR " + KEY_COLUMN2 + " LIKE" + " ? OR " + KEY_COLUMN3 + " LIKE" + " ?", queryWords, null, null, null, null); 

어떤 결과를 얻을지 확실하지 않음).

String[] queryWords = splitInWords(query); // your own method to split a string in words 
String selection = ""; 
String[] keyColumns = new String[]{KEY_COLUMN1, KEY_COLUMN2, KEY_COLUMN3}; 
for (int i = 0; i < queryWords.length; i++){ 
    if (i > 1){ 
    selection += " OR "; 
    } 
selection += keyColumns[i] + " LIKE " + queryWords[i]; 
} 

그럼 정확히 당신이 찾고있는 그러나 당신이 당신 조회 할 기대에 따라 적용됩니다 무엇을하지 않을 수 있습니다 (당신은 또한 더 이상 선택을 구축 할 수 있습니다 : 또 다른 해결책은 선택 문자열을 만드는 것입니다 모든 쌍 key/queryWord가있는 문자열). 그리고 이런 종류의 쿼리를 처리하는 데 더 좋은 아이디어를 찾지 못했습니다.

관련 문제