Mục tiêu
Sử dụng toán tử LIKE trong SQLite để tìm kiếm theo mẫu (pattern matching) với wildcard % (bất kỳ chuỗi nào) và _ (đúng 1 ký tự).
Các bước thực hiện
Bước 1: Tạo dự án mới
Android Studio → File → New Project → Empty Activity.
Bước 2: Layout (activity_main.xml) - Giống các bài trước
Bước 3: DatabaseHelper.java - Truy vấn LIKE
package com.example.sqlitelike;
import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import java.util.ArrayList;
class DatabaseHelper extends SQLiteOpenHelper {
private static final String DB_NAME = "salaryDatabase3";
private static final String TABLE_NAME = "SalaryDetails";
private static final int VERSION = 1;
DatabaseHelper(Context context) {
super(context, DB_NAME, null, VERSION);
}
@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL("CREATE TABLE " + TABLE_NAME + " (id INTEGER PRIMARY KEY, name TEXT, salary TEXT)");
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldV, int newV) {
db.execSQL("DROP TABLE IF EXISTS " + TABLE_NAME);
onCreate(db);
}
boolean insert(String name, String salary) {
SQLiteDatabase db = getWritableDatabase();
ContentValues cv = new ContentValues();
cv.put("name", name);
cv.put("salary", salary);
return db.insert(TABLE_NAME, null, cv) != -1;
}
// TRUY VẤN CHÍNH: WHERE name LIKE 'Sa%'
ArrayList<String> getAllContacts() {
SQLiteDatabase db = getReadableDatabase();
ArrayList<String> list = new ArrayList<>();
Cursor cursor = db.rawQuery(
"SELECT * FROM " + TABLE_NAME + " WHERE name LIKE 'Sa%'",
null
);
if (cursor.moveToFirst()) {
do {
list.add(cursor.getString(cursor.getColumnIndexOrThrow("name")));
} while (cursor.moveToNext());
}
cursor.close();
return list;
}
}
Giải thích LIKE & Wildcards
| Pattern | Ý nghĩa | Ví dụ khớp |
|---|---|---|
Sa% | Bắt đầu bằng "Sa" | Sam, Sarah, Sandy, Samsung |
%son | Kết thúc bằng "son" | Jason, Jackson, Johnson |
%an% | Chứa "an" ở bất kỳ vị trí | Ann, Andrew, Sandra, Duncan |
S_m | 3 ký tự, bắt đầu S, kết thúc m | Sam, Sim, Sum |
___ | Đúng 3 ký tự bất kỳ | Tom, Ann, Bob |
| Đặc điểm | LIKE | GLOB |
|---|---|---|
| Wildcard nhiều ký tự | % | * |
| Wildcard 1 ký tự | _ | ? |
| Case-sensitive | Mặc định KHÔNG (ASCII) | Mặc định CÓ |
| Escape character | ESCAPE '\' | Dùng [...] cho tập ký tự |
| Hiệu năng | Chậm hơn GLOB | Nhanh hơn |
Tối ưu hiệu năng
- Tạo index:
CREATE INDEX idx_name ON SalaryDetails(name)(giúp LIKE 'prefix%') - Tránh
LIKE '%suffix'hoặcLIKE '%middle%'(không dùng được index) - Full-text search: dùng FTS5 (Full Text Search) module của SQLite
