Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> Android

Cách sử dụng unlikely() trong SQLite Android

Giới thiệu

Hàm unlikely(X) trong SQLite là gợi ý cho trình tối ưu hóa truy vấn (query planner) rằng biểu thức X hiếm khi đúng. Nó không thay đổi kết quả truy vấn mà chỉ ảnh hưởng đến kế hoạch thực thi.

Bước 1 & 2: Tạo dự án và Giao diện

Giao diện giống các ví dụ SQLite trước: EditText tên, lương, các nút CRUD, ListView.

Bước 3: MainActivity.java

Code tương tự, khởi tạo DatabaseHelper.

Bước 4: DatabaseHelper.java - Sử dụng unlikely()

package com.example.andy.myapplication;

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 {
    public static final String DATABASE_NAME = "salaryDatabase9";
    public static final String CONTACTS_TABLE_NAME = "SalaryDetails";

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

    @Override
    public void onCreate(SQLiteDatabase db) {
        db.execSQL("CREATE TABLE " + CONTACTS_TABLE_NAME + 
            "(id INTEGER PRIMARY KEY, name TEXT, salary REAL, datetime DEFAULT CURRENT_TIMESTAMP)");
    }

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

    public boolean insert(String name, String salary) {
        SQLiteDatabase db = getWritableDatabase();
        ContentValues cv = new ContentValues();
        cv.put("name", name);
        cv.put("salary", salary);
        db.replace(CONTACTS_TABLE_NAME, null, cv);
        return true;
    }

    // QUAN TRỌNG: Sử dụng unlikely(name) - trả về giá trị name nhưng gợi ý optimizer
    public ArrayList<String> getAllContacts() {
        SQLiteDatabase db = getReadableDatabase();
        ArrayList<String> array_list = new ArrayList<>();
        // unlikely() trả về chính đối số của nó, nhưng đánh dấu là "hiếm khi true"
        Cursor res = db.rawQuery("SELECT unlikely(name) AS fullname FROM " + CONTACTS_TABLE_NAME, null);
        res.moveToFirst();
        while (!res.isAfterLast()) {
            if (res != null && res.getCount() > 0) {
                array_list.add(res.getString(res.getColumnIndex("fullname")));
            }
            res.moveToNext();
        }
        res.close();
        return array_list;
    }

    public boolean update(String name, String salary) {
        SQLiteDatabase db = getWritableDatabase();
        ContentValues cv = new ContentValues();
        cv.put("name", name);
        cv.put("salary", salary);
        return db.update(CONTACTS_TABLE_NAME, cv, "name = ?", new String[]{name}) > 0;
    }

    public boolean delete() {
        getWritableDatabase().execSQL("DELETE FROM " + CONTACTS_TABLE_NAME);
        return true;
    }
}

Giải thích unlikely()

  • Cú pháp: unlikely(X) tương đương X nhưng gợi ý optimizer rằng X hiếm khi khác 0/true.
  • Cặp đôi: likely(X) - gợi ý X thường đúng.
  • Tác dụng: Giúp query planner chọn index phù hợp hơn khi X là điều kiện WHERE.
  • Trong SELECT: Như ví dụ này, unlikely(name) trả về giá trị name bình thường, chỉ khác ở metadata cho optimizer.
  • Lưu ý: Chỉ có tác dụng khi dùng trong mệnh đề WHERE/JOIN, trong SELECT thì không ảnh hưởng kế hoạch.

Chạy ứng dụng

Cách sử dụng unlikely() trong SQLite Android

Hiển thị tên nhân viên (giá trị của unlikely(name) = name).