[Android Cơ Bản] Sử dụng Sqlite với openOrCreateDatabase – Phần 2

Link phần 1 : http://www.dotplays.com/android-co-ban-su-dung-sqlite-voi-openorcreatedatabase/

hi các em, trong bài tiếp theo này, anh hướng dẫn các em triển khai ứng dụng Từ điển tiếng anh trong lập trình Android Cơ bản sử dụng Sqlite database với câu lệnh openOrCreateDatabase nhé

Để thực hiện tốt bài học này các em lưu ý cần nắm chắc kiến thức lập trình Java cơ bản, đã học các bài lập trình Android Cơ bản với giao diện và có kiến thức về cơ sở dữ liệu

Để bắt đầu triển khai, chúng ta cần có 1 file thiết kế ứng dụng, file chứa cơ sở dữ liệu từ điển.

Các em truy cập link sau để tải file thiết kế, file data : https://clk.ink/fileDataTuDienSqlite

Tải phần mềm xem file DB sqlite : https://sqlitebrowser.org/

Sau khi tải file data và cài đặt phần mềm Sqlite Brower, mở file lên ta được giao diện như sau :

Như vậy, file dữ liệu ở đây chứa 1 bảng từ điển với các cột lần lượt là :

id : khóa chính của bảng

word : từ tiếng anh cần tra cứu

html : chứa nội dung của word và phiên âm. ở đây đã được lưu sẵn dưới dạng html

description : chứa ý nghĩa của từ

pronounce : cách phát âm của từ

Bước tiếp theo, tạo 1 dự án mới trên Android Studio và copy file từ điển vào thư mục assets của project, trong ví dụ này chúng ta sẽ lưu file dữ liệu tại thư mục assets của dự án các em nhé

Sau khi tạo dự án mới và copy file từ điển ta được dự án như sau :

Các em lưu ý nếu dự án chưa có thư mục assets thì chúng ta tạo thư mục như sau :

Bước kế tiếp chúng ta xây dựng class SqliteOpenHelper để copy file DB từ thư mục assets và phương thức tìm kiếm từ cần tra như sau :

    // Đường dẫn 
    private static String DB_PATH = "";
    private static String DB_NAME = "dict.db";// Database name
  
  //Copy the database from assets
    private void copyDataBase() throws IOException {
        InputStream mInput = mContext.getAssets().open(DB_NAME);
        String outFileName = DB_PATH + DB_NAME;
        OutputStream mOutput = new FileOutputStream(outFileName);
        byte[] mBuffer = new byte[1024];
        int mLength;
        while ((mLength = mInput.read(mBuffer)) > 0) {
            mOutput.write(mBuffer, 0, mLength);
        }
        mOutput.flush();
        mOutput.close();
        mInput.close();
    }

Biến DB_PATH là đường dẫn lưu file db trong project, biến này với API 16 và API >= 17 khác nhau nên chúng ta có thêm câu lệnh như sau :

if (android.os.Build.VERSION.SDK_INT >= 17) {
    DB_PATH = context.getApplicationInfo().dataDir + "/databases/";
} else {
    DB_PATH = "/data/data/" + context.getPackageName() + "/databases/";
}

Cuối cùng chúng ta có câu lệnh tìm kiếm từ cần tra, ở đâu anh sử dụng từ khóa LIKE để tìm kiếm

 public List<Word> searchWord(String text) {
        List<Word> words = new ArrayList<>();

        SQLiteDatabase sqLiteDatabase = this.getWritableDatabase();

        String SQL = "SELECT * FROM " + AV_TABLE + " WHERE " + WORD + " LIKE '" + text + "%'";

        Cursor cursor = sqLiteDatabase.rawQuery(SQL, null);

        if (cursor != null) {
            if (cursor.getCount() > 0) {

                cursor.moveToFirst();
                while (!cursor.isAfterLast()) {

                    Word word = new Word();

                    word.id = cursor.getInt(cursor.getColumnIndex(ID));
                    word.word = cursor.getString(cursor.getColumnIndex(WORD));
                    word.description = cursor.getString(cursor.getColumnIndex(DES));
                    word.html = cursor.getString(cursor.getColumnIndex(HTML));
                    word.pronounce = cursor.getString(cursor.getColumnIndex(PRO));
                    words.add(word);
                    cursor.moveToNext();

                }
                cursor.close();
            }
        }

        return words;
    }

Các bước còn lại chúng ta tạo giao diện và ghép code anh đã giải thích trong link code phía dưới, các em xem có câu hỏi gì thì post trên nhóm nhé.

Đừng quên theo dõi kênh youtube của anh để xem chi tiết hướng dẫn cho bài này nhé

Code full : https://github.com/huuhuybn/TuDien