Cơ sở dữ liệu trong Android
Bài đăng này đã không được cập nhật trong 9 năm
Android cung cấp hệ quản trị cơ sở dữ liệu quan hệ đầy đủ thông qua thư viện SQLite, mà không có bất kỳ hạn chế nào.
Sử dụng SQLite, bạn có thể tạo độc lập, cơ sở dữ liệu quan hệ cho mỗi ứng dụng. Sử dụng chúng để lưu trữ và quản lý cấu trúc dữ liệu phức tạp của ứng dụng. Tất cả cơ sở dữ liệu của Android được lưu trữ trong thư mục /data/data/<tên package>/databases trong thiết bị hoặc máy ảo. Mặc định tất cả cơ sở dữ liệu là riêng tư chỉ có ứng dụng tạo ra chúng mới có quyền truy cập. Tuy nhiên, để chia sẻ cơ sở dữ liệu của ứng dụng ra ngoài chúng ta có thể dụng Content Providers.
Giới thiệu SQLite
SQLite là hệ quản trị cơ sở dữ liệu quan hệ (Relational database management system – RDBMS). SQLite có những điểm mạnh sau:
- mã nguồn mở
- tuân theo quy chuẩn về cơ sở dữ liệu
- kích thước nhẹ
- cấu trúc đơn tầng
Nó được cài đặt như một thư viện nhỏ gọn và là một phần trong bộ phần mềm Android. Ngoài ra, SQLite cung cấp các chức năng như thông qua một thư viện chứ không phải là một quá trình riêng biệt. Mỗi cơ sở dữ liệu sẽ trở thành một phần được tích hợp trong ứng dụng. Điều này giúp làm giảm sự phụ thuộc vào bên ngoài, tối thiểu độ trễ và đơn giản hóa các giao dịch và đồng bộ.
SQLite nổi tiếng là cơ sở dữ liệu cực kỳ đáng tin cậy và là sự lựa chọn cho nhiều thiết bị điện tự bao gồm máy nghe nhạc MP3, Iphone, iPod về hệ thống cơ sở dữ liệu.
Kích thước nhẹ và mạnh mẽ, SQLite khác với nhiều với nhiều cơ sở dữ liệu khác bằng cách sử dụng hướng tiếp cận mềm dẻo để định nghĩa cột. Thay vì yêu cầu giá trị của cột phải phù hợp với 1 loại duy nhất, giá trị trong mỗi hàng cho mỗi cột. Dẫn đến là không có sự yêu cầu chặt chẽ nào cho giá trị của mỗi cột trong một hàng.
Để có thể hiểu nhiều hơn và sâu hơn về SQLite, bao gồm cả điểm mạnh điểm yếu và hạn chế của nó, hãy truy cập vào website chính thức www.sqlite.com
Cursors and Content Values
Đối tượng ContentValues được sử dụng để chèn 1 hàng mới vào trong bảng cơ sở dữ liệu. Mỗi đối tượng ContentValues biểu diễn một hàng và ánh xạ cột sang giá trị tương ứng.
Truy vấn trong Android được trả về như các đối tượng con trỏ (Cursor object). Thay vì giải nén và trả về một bản sao của các giá trị kết quả, Cursors hoạt động như con trỏ đến một tập hợp các dữ liệu cơ bản. Cursor là một cách quản lý kiểm soát vị trí của hàng trong kết quả trả về của một truy vấn cơ sở dữ liệu.
Lớp Cursor bao gồm một số hàm để điều hướng kết quả truy vấn:
- moveToFirst : di chuyển con trỏ đến hàng đầu tiên trong kết quả truy vấn.
- moveToNext : di chuyển con trỏ đến hàng tiếp theo
- moveToPrevious : di chuyển con trỏ đến hàng phía trước
- getCount : trả về số hàng trong tập kết quả
- getColumnIndexOrThrow : trả về chỉ số của cột với tên được chỉ định
- getColumnName : trả về tên cuả chỉ số cột được chỉ địn
- getColumnNames: Trả về mảng String của tất cả tên các cột in cursor hiện tại
- moveToPosition: di chuyển con trỏ đến hàng được chỉ địn
- getPosition: trả về vị trí hiện tại của con trỏ.
Android cung cấp các cơ chế để quản lý các Cursor bên trong các Activities. Phương thức startManagingCursor được tích hợp vào vòng thời gian của Cursor bên trong vòng thời gian của Activity. Khi kết thúc Cursor thì sẽ tự động gọi stopManagingCursor.
Thêm, sửa và xóa hàng
Lớp SQLiteDatabase đã đưa các phương thức insert, delete và update và được đóng gói để thực thi các câu lệnh SQL được yêu cầu. Tuy nhiên, phương thưc execSQL cho phép bạn thực thi bất kỳ SQL hợp lệ nào vào trong bảng cơ sở dữ liệu.
Thêm record mới
Để thêm hàng mới, sử dụng đối tượng ContentValues và phương thức put để đặt các giá trị cho mỗi cột. Ví dụ:
// Create a new row of values to insert.
ContentValues newValues = new ContentValues();
// Assign values for each row.
newValues.put(COLUMN_NAME, newValue);
[ ... Repeat for each column ... ]
// Insert the row into your table
myDatabase.insert(DATABASE_TABLE, null, newValues);
Cập nhật hàng
Tạo mới đối tượng ContentValues và sử dụng phưowng thức put để gán giá trị mới cho mỗi cột cần cập nhật. Sau đó cập nhật lại đối tượng Cursor.
// Define the updated row content.
ContentValues updatedValues = new ContentValues();
// Assign values for each row.
updatedValues.put(COLUMN_NAME, newValue);
[ ... Repeat for each column ... ]
String where = KEY_ID + “=” + rowId;
// Update the row with the specified index with the new values.
myDatabase.update(DATABASE_TABLE, updatedValues, where, null);
Xoá hàng
Để xóa hàng, gọi hàm delete cho đối tượng database và chỉ định tên bảng và điều kiện where:
myDatabase.delete(DATABASE_TABLE, KEY_ID + “=” + rowId, null);
Demo:
Tham Khảo: Chapter 6, Professional Android A pplication Development - Reto Meier
All rights reserved