1

このチュートリアルに基づいて、入力された国名と「KEY_NAME」を比較してリストビューのコンテンツをファイラーする「fetchCountriesByName」という関数があります。一致する「KEY_NAME」レコードのみが表示されます。

http://www.mysamplecode.com/2012/07/android-listview-cursadapter-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;

}
4

2 に答える 2

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が期待するものです。

于 2013-03-08T07:31:15.217 に答える
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);
于 2013-03-08T07:26:41.513 に答える