Lưu trữ và truy xuất dữ liệu với SQLite trong Android

SQLite là gì? SQLite là một hệ thống cơ sở dữ liệu quan hệ nhỏ gọn, hoàn chỉnh được phát triển bởi Richard Hipp bằng ngôn ngữ lập trình C. Lưu trữ và truy xuất dữ liệu với SQLite trong Android vô cùng đơn giản khi không cần cài đặt hoặc cấu hình quản trị, hỗ trợ lưu trữ và truy xuất dữ liệu có nét tương đồng hệ quản trị cơ sở dữ liệu MySQL.

SQLite là phần mềm quản lý cơ sở dữ liệu (DBMS) gọn nhẹ tương tự như MySQL, PostgreSQL… Không giống như hầu hết các hệ cơ sở dữ liệu SQL khác thì SQLite không có máy chủ riêng biệt mà thực hiện lưu trữ và truy xuất dữ liệu trực tiếp trên mỗi thiết bị.

Lưu trữ và truy xuất dữ liệu với SQLite trong Android

Tại sao nên sử dụng SQLite:

  • SQLite là một hệ cơ sở dữ liệu mã nguồn mở, được tích hợp mặc định trên thiết bị Android.
  • SQLite không cần phải yêu cầu thiết lập cấu hình, cài đặt máy chủ.
  • SQLite hỗ trợ cở sở dữ liệu quan hệ.
  • Hỗ trợ cú pháp lưu trữ và truy vấn cơ sở dữ liệu như SQL thế nên dễ dàng sử dụng.
  • SQLite gọn nhẹ và chạy trực tiếp trên thiết bị, không cần phải yêu cầu máy chủ riêng biệt như các hệ quản trị cơ sở dữ liệu khác.

Sử dụng SQLite trong Android:

Lưu trữ và truy xuất dữ liệu với SQLite trong Android vô cùng đơn giản bởi SQLite được tích hợp mặc định trên thiết bị Android.

Xem thêm:

Ví dụ sử dụng SQLite trong Android Ví dụ sử dụng SharedPreferences trong Android

Chúng ta cần kế thừa lớp SQLiteOpenHelper và sau đó sẽ override lại 2 phương thức onCreate()onUpgrade(), SQLiteOpenHelper là lớp cho phép xử lý các thao tác đối với SQLite.

  • onCreate(): được gọi khi database đã được tạo, dùng để viết những câu lệnh tạo bảng.
  • onUpgrade(): được gọi khi database được nâng cấp khi cần chỉnh sửa cấu trúc các bảng, thay đổi…
package com.teamvietdev.android.sqlitedatabase;

import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;

public class DatabaseHelper extends SQLiteOpenHelper {

    private static final int DATABASE_VERSION = 1;
    private static final String DATABASE_NAME = "dbname";

    private static final String TABLE_NAME = "tbprofile";
    private static final String COLUMN_ID = "id";
    private static final String COLUMN_NAME = "name";
    private static final String COLUMN_MAIL = "mail";

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

    @Override
    public void onCreate(SQLiteDatabase db) {
        String value = String.format("CREATE TABLE %s(%s INTEGER PRIMARY KEY, %s TEXT, %s TEXT)", TABLE_NAME, COLUMN_ID, COLUMN_NAME, COLUMN_MAIL);
        db.execSQL(value);
    }

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

}

Trong đoạn mã chương trình trên bạn sẽ thấy rằng DATABASE_VERSION chính là phiên bản hiện tại của cơ sở dữ liệu, DATABASE_NAME là tên cơ sở dữ liệu, TABLE_NAME là tên bảng và COLUMN_ID, COLUMN_NAME, COLUMN_MAIL là những cột trong bảng.

SQLiteDatabase là lớp cơ bản dùng để xử lý với SQLite trong Android như thao tác CRUD (thêm, sửa, xóa, đọc dữ liệu).

Lệnh thêm dữ liệu mới vào bảng:

public long create(String name, String mail) {
        SQLiteDatabase db = this.getWritableDatabase();
        ContentValues values = new ContentValues();
        values.put(COLUMN_NAME, name);
        values.put(COLUMN_MAIL, mail);
        long id = db.insert(TABLE_NAME, null, values);
        db.close();
        return id;
}

Sử dụng phương thức insert() để thêm một bản ghi mới vào cơ sở dữ liệu.

Lệnh sửa dữ liệu mới vào bảng:

public int update(long id, String name, String mail) {
        SQLiteDatabase db = this.getWritableDatabase();
        ContentValues values = new ContentValues();
        values.put(COLUMN_NAME, name);
        values.put(COLUMN_MAIL, mail);
        return db.update(TABLE_NAME, values, COLUMN_ID + " = ?",
                new String[]{String.valueOf(id)});
}

Sử dụng phương thức update() để cập nhật một bản ghi trong cơ sở dữ liệu.

Lệnh xóa dữ liệu mới vào bảng:

public void delete(long id) {
        SQLiteDatabase db = this.getWritableDatabase();
        db.delete(TABLE_NAME, COLUMN_ID + " = ?", new String[]{String.valueOf(id)});
        db.close();
}

Sử dụng phương thức delete() để xóa một bản ghi trong cơ sở dữ liệu.

Lệnh truy xuất dữ liệu lấy thông tin một bản ghi:

public Object getValue(long id) {
        SQLiteDatabase db = this.getReadableDatabase();
        Cursor cursor = db.query(TABLE_NAME,
                new String[]{COLUMN_ID, COLUMN_NAME, COLUMN_MAIL}, COLUMN_ID + "=?",
                new String[]{String.valueOf(id)}, null, null, null, null);
        if (cursor != null)
            cursor.moveToFirst();
        Object[] obj = new Object[3];
        obj[0] = cursor.getInt(cursor.getColumnIndex(COLUMN_ID));
        obj[1] = cursor.getInt(cursor.getColumnIndex(COLUMN_NAME));
        obj[2] = cursor.getInt(cursor.getColumnIndex(COLUMN_MAIL));
        cursor.close();
        return obj;
}

Lệnh truy xuất dữ liệu lấy thông tin danh sách bản ghi:

public List<Object> getAll() {
        List<Object> notes = new ArrayList<>();
        String selectQuery = "SELECT  * FROM " + TABLE_NAME;
        SQLiteDatabase db = this.getWritableDatabase();
        Cursor cursor = db.rawQuery(selectQuery, null);
        if (cursor.moveToFirst()) {
            do {
                Object[] obj = new Object[3];
                obj[0] = cursor.getInt(cursor.getColumnIndex(COLUMN_ID));
                obj[1] = cursor.getInt(cursor.getColumnIndex(COLUMN_NAME));
                obj[2] = cursor.getInt(cursor.getColumnIndex(COLUMN_MAIL));
                notes.add(obj);
            } while (cursor.moveToNext());
        }
        db.close();
        return notes;
}

Sử dụng phương thức query() hoặc rawQuery() để truy xuất dữ liệu.

Lời kết: Như vậy trong ứng dụng Android để thực hiện việc lưu trữ và truy xuất dữ liệu bạn có thể sử dụng SQLite trong Android. Ngoài ra bạn có thể xem thêm nhiều bài viết khác trong chủ đề lập trình Android tại Team Việt Dev.

(Tác giả: Team Việt Dev)

Bình luận