2016-04-05 26 views
0

%userCriteria%のようなLIKE文を使用してデータベースを照会しようとしています。私は(MySQLiteHelperに格納されている)、次の列を持つテーブルを持っている:SQLite LIKEの選択が機能していません

 MySQLiteHelper.COLUMN_DESCRIPTION, 
     MySQLiteHelper.COLUMN_PUB_DATE, 
     MySQLiteHelper.COLUMN_TITLE, 
     MySQLiteHelper.COLUMN_USER_SPEC_NAME, 
     MySQLiteHelper.COLUMN_LINK 

は、私が唯一の特定の文字列を含むTITLE列のエントリを返しますクエリを作成したいです。

私は実装しています私の方法は、(それがクエリを実行することになっている)私のdataSourseClassであるが以下のようになります。

public ArrayList<RssItem> read(String selection, String[] selectionArgs, String groupBy, String having, String orderBy) { 
    ArrayList<RssItem> tasks = new ArrayList<RssItem>(); 

    Cursor cursor = mDatabase.query(MySQLiteHelper.TABLE_NAME, new String[]{allColumns[3]}, selection, selectionArgs, groupBy, having, orderBy); 

    cursor.moveToFirst(); 
    while (!cursor.isAfterLast()) { 
     RssItem task = cursorToTask(cursor); 
     tasks.add(task); 
     cursor.moveToNext(); 
    } 
    // Make sure to close the cursor 
    cursor.close(); 
    return tasks; 

} 

allColumns:

private String[] allColumns = { 
     MySQLiteHelper.COLUMN_ID, 
     MySQLiteHelper.COLUMN_DESCRIPTION, 
     MySQLiteHelper.COLUMN_PUB_DATE, 
     MySQLiteHelper.COLUMN_TITLE, 
     MySQLiteHelper.COLUMN_USER_SPEC_NAME, 
     MySQLiteHelper.COLUMN_LINK 
}; 

そして、これは私が呼び出しています方法ですが私のアクティビティのreadメソッド:

private void searchDatabase(String searchCriteriaTitle) { 
    //clear the data from the adapter... 
    mAdapter.clear(); 
    //get all of the stored records (during the parsing process)... 
    List<RssItem> items = rssItemDataSource.read(MySQLiteHelper.COLUMN_TITLE + " LIKE ?",new String[]{searchCriteriaTitle},null,null,null); 

    //if the search criteria is not empty string... 
    if(!searchedItem.equals("")){ 
     for(int i = 0; i < items.size();i++) { 
      //search from a match against the user's search criteria... 

      mAdapter.add(items.get(i)); 

     } 
    } 
    //if the search criteria is am empty string... 
    else{ 
     //read all of the 
     List<RssItem> allItems = rssItemDataSource.getAllTasks(); 
     //add all... 
     for(int i = 0; i < allItems.size();i++) { 
      mAdapter.add(allItems.get(i)); 
     } 
    } 
} 

今すぐ返されるエントリのリストは空です。なぜか分からない。助言がありますか?

答えて

2

試しましたか?

List<RssItem> items = rssItemDataSource.read(MySQLiteHelper.COLUMN_TITLE + " LIKE ?", new String[]{"%"+searchCriteriaTitle+"%"},null,null,null); 
+1

を試すことができます。それはトリックでした!それを気に入ってください:) –

+1

@GeorgiKoemdzhiev yo welcome budy !! –

0

あなたはありがとう

Cursor cursor = mDatabase rawQuery("select "+COLUMN_TITLE +"from "+MySQLiteHelper.TABLE_NAME+" where "+MySQLiteHelper.COLUMN_TITLE+" LIKE \'?\'", new String[]{"userCriteria"}); 
    if(cursor.moveToFirst()){ 
     do { 
      RssItem task = cursorToTask(cursor); 
      tasks.add(task); 
      cursor.moveToNext(); 
    }while (cursor.moveToNext()); 
} 
+0

ありがとうございます。私はrawQueryを自分で試してみましたが、それはより複雑に見えました。あなたの助けを感謝:) –

+2

@ georgi-koemdzhiev:うれしいあなたがそれを解決:)ハッピーコーディング仲間:) –

関連する問題