Android-Cơ sở dữ liệu SQLite

SQLite là một hệ thống quản lý cơ sở dữ liệu quan hệ (RDBMS) phổ biến trong lập trình ứng dụng di động, bao gồm cả Android. Với SQLite, bạn có thể lưu trữ và truy vấn dữ liệu trong ứng dụng của mình.

Các bảng trong SQLite được tổ chức dưới dạng các cột và hàng, tương tự như các bảng trong các hệ thống quản lý cơ sở dữ liệu khác. Bạn có thể tạo bảng mới, thêm dữ liệu vào bảng, cập nhật hoặc xóa dữ liệu từ bảng, và truy vấn dữ liệu từ bảng.

Trong Android, SQLite được tích hợp sẵn và hỗ trợ thông qua gói android.database.sqlite. Bạn có thể tạo các lớp Java để đại diện cho các bảng trong cơ sở dữ liệu của mình và sử dụng các phương thức để thực hiện các thao tác với dữ liệu.

Một số ưu điểm của SQLite là kích thước nhỏ, tốc độ truy vấn nhanh và khả năng hoạt động độc lập với các hệ thống quản lý cơ sở dữ liệu khác. Tuy nhiên, nó không phải là một hệ thống quản lý cơ sở dữ liệu toàn diện và có thể không phù hợp cho các ứng dụng với nhu cầu xử lý dữ liệu lớn hoặc phức tạp.

Dưới đây là một ví dụ về cách thực hiện các hoạt động CRUD (Create, Read, Update, Delete) trong SQLite trên Android.

Đầu tiên, ta cần tạo một lớp để quản lý cơ sở dữ liệu SQLite của chúng ta. Trong ví dụ này, chúng ta sẽ tạo một lớp là DatabaseHelper:

public class DatabaseHelper extends SQLiteOpenHelper {

    // Tên cơ sở dữ liệu và phiên bản
    private static final String DATABASE_NAME = "mydatabase.db";
    private static final int DATABASE_VERSION = 1;

    // Tên bảng và các trường trong bảng
    private static final String TABLE_NAME = "mytable";
    private static final String COLUMN_ID = "id";
    private static final String COLUMN_NAME = "name";
    private static final String COLUMN_EMAIL = "email";

    // Câu lệnh SQL để tạo bảng
    private static final String SQL_CREATE_TABLE =
            "CREATE TABLE " + TABLE_NAME + "(" +
                    COLUMN_ID + " INTEGER PRIMARY KEY AUTOINCREMENT, " +
                    COLUMN_NAME + " TEXT, " +
                    COLUMN_EMAIL + " TEXT)";

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

    @Override
    public void onCreate(SQLiteDatabase db) {
        // Thực hiện câu lệnh tạo bảng
        db.execSQL(SQL_CREATE_TABLE);
    }

    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        // Xóa bảng cũ nếu tồn tại và tạo lại bảng mới
        db.execSQL("DROP TABLE IF EXISTS " + TABLE_NAME);
        onCreate(db);
    }
}

Sau đó, chúng ta có thể sử dụng lớp này để thực hiện các hoạt động CRUD trong SQLite. Ví dụ, để thêm một bản ghi mới vào bảng, ta có thể sử dụng phương thức sau đây:

public long addRecord(String name, String email) {
    SQLiteDatabase db = this.getWritableDatabase();
    ContentValues values = new ContentValues();
    values.put(COLUMN_NAME, name);
    values.put(COLUMN_EMAIL, email);
    long result = db.insert(TABLE_NAME, null, values);
    db.close();
    return result;
}

Để lấy tất cả các bản ghi từ bảng, ta có thể sử dụng phương thức sau đây:

public List<Record> getAllRecords() {
    List<Record> recordList = new ArrayList<>();
    String selectQuery = "SELECT  * FROM " + TABLE_NAME;
    SQLiteDatabase db = this.getWritableDatabase();
    Cursor cursor = db.rawQuery(selectQuery, null);

    if (cursor.moveToFirst()) {
        do {
            Record record = new Record();
            record.setId(cursor.getInt(cursor.getColumnIndex(COLUMN_ID)));
            record.setName(cursor.getString(cursor.getColumnIndex(COLUMN_NAME)));
            record.setEmail(cursor.getString(cursor.getColumnIndex(COLUMN_EMAIL)));
            recordList.add(record);
        } while (cursor.moveToNext());
    }

    cursor.close();
    db.close();
    return recordList;
}