Android SQLite 模糊查询详解

在 Android 开发中,存储和管理数据是非常重要的一部分。SQLite 是一种轻量级的关系型数据库,是 Android 平台的默认数据库引擎。在使用 SQLite 进行数据查询时,模糊查询是一种常见的需求。本文将详细介绍在 Android 中使用 SQLite 进行模糊查询的方法,并提供相应的代码示例。

什么是模糊查询?

模糊查询是指通过指定一定的模式来查找数据库中的数据,而不仅仅是精确匹配。在实际开发中,我们常常需要根据用户的输入来查找相似的记录,这时就需要使用模糊查询来实现。

使用 SQLite 进行模糊查询

在 Android 中,我们可以通过自定义 SQL 语句来实现模糊查询。SQLite 提供了 LIKE 关键字来实现模糊匹配。LIKE 关键字可以与通配符一起使用,常见的通配符有 %_

  • % 代表零个或多个字符
  • _ 代表一个字符

下面是一个使用 LIKE 关键字进行模糊查询的示例:

String keyword = "apple";
String sql = "SELECT * FROM fruits WHERE name LIKE '%" + keyword + "%'";
Cursor cursor = db.rawQuery(sql, null);

上述代码中,我们通过 LIKE 关键字和 % 在数据库中进行模糊查询。keyword 是用户输入的关键词,我们将其插入到 SQL 语句中,通过 % 来表示关键词前后可以有任意字符。

使用 SQLiteOpenHelper 辅助类

在实际开发中,我们通常使用 SQLiteOpenHelper 辅助类来管理数据库的创建和版本升级。下面是一个使用 SQLiteOpenHelper 辅助类进行模糊查询的示例:

public class DatabaseHelper extends SQLiteOpenHelper {

    public static final String DATABASE_NAME = "fruits.db";
    public static final int DATABASE_VERSION = 1;
    public static final String TABLE_NAME = "fruits";
    public static final String COLUMN_NAME = "name";

    public DatabaseHelper(Context context) {
        super(context, DATABASE_NAME, null, DATABASE_VERSION);
    }

    @Override
    public void onCreate(SQLiteDatabase db) {
        String sql = "CREATE TABLE " + TABLE_NAME + " (" +
                "_id INTEGER PRIMARY KEY AUTOINCREMENT," +
                COLUMN_NAME + " TEXT)";
        db.execSQL(sql);
    }

    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        String sql = "DROP TABLE IF EXISTS " + TABLE_NAME;
        db.execSQL(sql);
        onCreate(db);
    }

    public List<String> searchFruits(String keyword) {
        List<String> fruits = new ArrayList<>();
        SQLiteDatabase db = getReadableDatabase();

        String selection = COLUMN_NAME + " LIKE ?";
        String[] selectionArgs = {"%" + keyword + "%"};

        Cursor cursor = db.query(TABLE_NAME, null, selection, selectionArgs, null, null, null);
        if (cursor != null && cursor.moveToFirst()) {
            do {
                String fruit = cursor.getString(cursor.getColumnIndex(COLUMN_NAME));
                fruits.add(fruit);
            } while (cursor.moveToNext());
        }

        if (cursor != null) {
            cursor.close();
        }

        return fruits;
    }
}

上述代码中,我们创建了一个名为 DatabaseHelper 的辅助类,继承自 SQLiteOpenHelper。在 onCreate 方法中,我们创建了一个名为 fruits 的表,表中包含 _idname 两个列。

searchFruits 方法中,我们使用 query 方法进行模糊查询。通过设置查询条件 selection 和条件值 selectionArgs,我们可以实现模糊匹配。

示例应用:水果查询

为了更好地理解模糊查询的使用,让我们创建一个简单的示例应用。该应用将提供一个搜索框,用户可以输入关键词来查找与之相关的水果名称。

首先,在 activity_main.xml 中添加一个搜索框和一个显示结果的 ListView:

<LinearLayout
    ...>

    <EditText
        android:id="@+id/editText"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:hint="输入关键词" />

    <Button
        android:id="@+id/button"
        android:layout_width="wrap_content