2013-03-08 6 views
1

이 자습서를 기반으로 "KEY_NAME"을 입력 한 국가 이름과 비교하여 목록보기 내용을 정리하는 "fetchCountriesByName"이라는 함수가 있습니다. 일치하는 'KEY_NAME'레코드 만 표시됩니다.Android : SQLite, 여러 필드에서 가져 오는 방법?

http://www.mysamplecode.com/2012/07/android-listview-cursoradapter-sqlite.html

public Cursor fetchCountriesByName(String inputText) throws SQLException { 
    Log.w(TAG, inputText); 
    Cursor mCursor = null; 
    if (inputText == null || inputText.length() == 0) { 
    mCursor = mDb.query(SQLITE_TABLE, new String[] {KEY_ROWID, 
    KEY_CODE, KEY_NAME, KEY_CONTINENT, KEY_REGION}, null, null, null, null, null); 

} 
else { 
mCursor = mDb.query(true, SQLITE_TABLE, new String[] {KEY_ROWID, 
    KEY_CODE, KEY_NAME, KEY_CONTINENT, KEY_REGION}, 
    KEY_NAME + " like '%" + inputText + "%'", null, 
    null, null, null, null); 
} 
if (mCursor != null) { 
    mCursor.moveToFirst(); 
} 
return mCursor; 

} 

내 질문은 여러 분야에서 인출하는 방법은 입력 된 텍스트와 비슷한 무엇입니까? 입력 된 텍스트를 KEY_NAME과 (과) 비교하는 것뿐만 아니라 KEY_REGION과 비교하기를 원합니다. 나는 굵은 영역에 "KEY_REGION"을 추가했지만 작동하지 않습니다. KEY_REGION & KEY_NAME을 (를) 어떻게 가져올 수 있습니까?

public Cursor fetchCountriesByName(String inputText) throws SQLException { 
Log.w(TAG, inputText); 
Cursor mCursor = null; 
if (inputText == null || inputText.length() == 0) { 
    mCursor = mDb.query(SQLITE_TABLE, new String[] {KEY_ROWID, 
    KEY_CODE, KEY_NAME, KEY_CONTINENT, KEY_REGION}, 
    null, null, null, null, null); 

} 
else { 
    mCursor = mDb.query(true, SQLITE_TABLE, new String[] {KEY_ROWID, 
    KEY_CODE, KEY_NAME, KEY_CONTINENT, KEY_REGION}, 
    KEY_NAME+   KEY_REGION  + " like '%" + inputText + "%'", null, 
    null, null, null, null); 
} 
if (mCursor != null) { 
    mCursor.moveToFirst(); 
} 
return mCursor; 

} 

답변

2

부울 논리 연산자 AND 또는 OR을 사용합니다.

mCursor = mDb.query(true, SQLITE_TABLE, new String[] {KEY_ROWID, 
KEY_CODE, KEY_NAME, KEY_CONTINENT, KEY_REGION}, 
KEY_NAME + " like '%" + inputText + "%' AND "+ KEY_REGION + " like '%" + inputText + "%'", null, 
null, null, null, null); 
+0

정말 고마워요. 그것은 작동합니다! –

2

이 시도 :

mCursor = mDb.query(true, SQLITE_TABLE, new String[] {KEY_ROWID, 
    KEY_CODE, KEY_NAME, KEY_CONTINENT, KEY_REGION}, 
    KEY_NAME+" like '%?%' OR "+KEY_REGION+" like '%?%'", new String[]{inputText, inputText}, 
    null, null, null, null); 

바운드 변수를 SQL 주입 공격으로부터 당신을 보호한다 (?). ListView가 기대하는 것처럼 KEY_ROWID를 _ID로 변경하는 것도 고려해야합니다.

+0

바운드 변수 팁은 +1입니다. – Rajesh

관련 문제