【问题标题】:Search SQLite database in Android在 Android 中搜索 SQLite 数据库
【发布时间】:2026-01-18 09:15:01
【问题描述】:

我在我的 Android 应用程序中搜索 SQLite 数据库时遇到了一些问题。我使用 Search 接口将搜索变量(searchActivity.query)传递给这个:

   //searchActivity.query obtained from: 
   //String query = searchActivity.getStringExtra(SearchManager.QUERY);

   String searchString = "'" + searchActivity.query + "%'";

   //sqlitedb is called via: private SQLiteDatabase sqlitedb;

   Cursor cursor = sqlitedb.query(DATABASE_TABLE, new String[] 
    {"id", "FirstName","LastName"}, 
    "FirstName LIKE " + searchString, null, null, null, null);

    int index_CONTENT = cursor.getColumnIndex(FirstName);

    for(cursor.moveToFirst(); !(cursor.isAfterLast()); cursor.moveToNext()){
        result = result + cursor.getString(index_CONTENT) + "\n";
    }

问题是使用“LIKE”语句会输出数据库中的所有内容 - 违背了使用搜索界面的目的。我不太确定我哪里出错了。

我尝试用“=”替换 LIKE,但它什么也没显示,即使我 100% 确定记录存在。

任何帮助将不胜感激!

提前致谢,

更新: 对不起,误导性的标题。我没有正确传递搜索查询。

【问题讨论】:

    标签: android sqlite search


    【解决方案1】:

    试试这个,

    Cursor cursor = sqlitedb.query(DATABASE_TABLE, new String[] 
        {"id", "FirstName","LastName"}, 
        "FirstName LIKE '"+searchActivity.query+"%'", null, null, null, null);
    

    让我知道发生了什么..

    【讨论】:

    • 感谢您的回答。它仍在显示数据库中的所有内容。
    • searchActivity.query 是这样的: String query = searchActivity.getStringExtra(SearchManager.QUERY);我在数据库中有一条名为“b”的记录。当我将其设为“LIKE 'b%'”时,它起作用了(它只显示了该记录)。但是,它仍然会输出其他所有内容..
    • 只需调试并查看触发查询时 searchActivity.query 的值是什么,因为我认为您对此一无所知。
    • 你是对的!查询完全是空的。感谢您的帮助:)
    【解决方案2】:

    你应该绑定参数。

    query = "UPPER(" + COLUMNNAME + ") like ?";
    String searchString = searchActivity.query + "%"; 
    

    然后,

    sqlitedb.query(DATABASE_TABLE, new String[] 
    {"id", "FirstName","LastName"}, 
    query , new String[] {searchString},....);
    

    【讨论】:

      【解决方案3】:
      String sql = " SELECT * FROM Table WHERE xColumn LIKE '%"+textView1.getText().toString()+"%'";
      cursor = db.rawQuery(sql, null); 
      

      你可以像上面那样使用

      【讨论】:

      • 是的,但您不应该将文本输入直接转储到查询中。改为使用参数来保护 sql 语句。
      【解决方案4】:
      Cursor c = sqLiteDatabase.query(SQLiteHelper.MYDATABASE_TABLE, null, null, null, null, null, SQLiteHelper.KEY_CONTENT1 +" ASC");
      

      【讨论】: