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
的表,表中包含 _id
和 name
两个列。
在 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