2013-03-08 17 views
1

基於本教程,有一個名爲「fetchCountriesByName」的函數,通過比較「KEY_NAME」與輸入的國家/地區名稱來歸檔listview內容。只有匹配「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

非常感謝。有用! – 2013-03-08 07:31:40

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注入攻擊(?)。您還需要考慮將KEY_ROWID更改爲_ID,因爲這是ListView所期望的。

+0

+1爲綁定變量提示。 – Rajesh 2013-03-08 07:40:22

相關問題