CHƯƠNG 3 KỸ THUẬT XÂY DỰNG ỨNG DỤNG
3.2. Các thao tác cơ bản trên cơ sở dữ liệu
Để tạo một cơ sở dữ liệu trong SQLite, đầu tiên ta tạo một lớp kế thừa lớp SQLiteOpenHelper dùng để thao tác với cơ sở dữ liệu. Trong đó, ClassName là tên lớp.
public class ClassName extends SQLiteOpenHelper { // Tạo phương thức khởi tạo
// Override phương thức onCreate
public void onCreate (SQLiteDatabase db) { String sql = "câu lệnh tạo bảng";
db.execSQL(sql);
}
/* Các phương thức:
thêm dữ liệu, cập nhật dữ liệu, xóa dữ liệu và truy vấn dữ liệu */
}
Sau đó, ta cần tạo phương thức khởi tạo là một lớp con của lớp SQLiteOpenHelper, được truyền vào 4 tham số context, name, factory, version.
Khoa Tùng Dương - CT1901C – Xây dựng ứng dụng quản lý bàn ăn trên thiết bị di động android 29 public ClassName(Context context) {
super(context, name, factory, version);
}
- context: là giao diện chứa thống tin toàn cục về môi trường ứng dụng.
- name: Tên của database.
- factory: thường để mặc định là null.
- version: phiên bản của database, với phiên bản đầu tiên chúng ta để giá trị bằng 1.
Khi khởi tạo một đối tượng của lớp này, ta phải ghi đề 2 phương thức onCreate() và onUpgrade().
- onCreate(): được gọi khi cơ sở dữ liệu được tạo lần đầu.
- onUpgrade(): được gọi khi ứng dụng chứa nhiều phiên bản của cơ sở dữ liệu.
Và có 2 phương thức getWritableDatabase(), getReadableDatabase() được sử dụng để đọc và ghi dữ liệu:
- getWritableDatabase(): mở hay tạo một cơ sở dữ liệu cho việc đọc và ghi. Trả về một tham chiếu đến một cơ sở dữ liệu trong hình thức một đối tượng SQLiteDatabase.
- getReadableDatabase(): mở hay tạo một cơ sở dữ liệu chỉ cho việc đọc. Trả về một tham chiếu đến một cơ sở dữ liệu trong hình thức một đối tượng SQLiteDatabase.
3.2.2. Các thao tác trên cơ sở dữ liệu a. Tạo bảng trong SQLite
Để tạo bảng trong cơ sở dữ liệu, chúng ta dùng phương thức execSQL của lớp SQLiteDatabase để thực hiện lệnh truy vấn tại bảng. Lệnh SQL tạo bảng sẽ được chuyển thành chuỗi để chuyển đến phương thức execSQL().
public void onCreate (SQLiteDatabase db) { String sql = "CREATE TABLE" table_name "(
" trường_1 " kiểu_dữ_liệu,
" trường_2 " kiểu_dữ_liệu, ...
" trường_n " kiểu_dữ_liệu )";
db.execSQL(sql);
}
b. Thêm dữ liệu
Sử dụng phương thức insert để tạo mới một bản ghi vào cơ sở dữ liệu.
Ví dụ: ta có một đối tượng db thuộc kiểu SQLiteDatabase.
Khoa Tùng Dương - CT1901C – Xây dựng ứng dụng quản lý bàn ăn trên thiết bị di động android 30
Đầu tiên gọi phương thức getWritableDatabase mở cơ sở dữ liệu lên để đọc và ghi.
Sau đó tạo một đối tượng thuộc ContentValues để có thể put các giá trị vào trong các trường. Sau khi đã put hết giá trị rồi chúng ta gọi phương thức insert() và truyền vào 3 tham số:
- Tham số 1: tên bảng.
- Tham số 2: thường để mặc định là null.
- Tham số 3: đối tượng cần thêm.
public long create (Kiểu_dữ_liệu giá_trị){
SQLiteDatabase db = this.getWritableDatabase();
ContentValues contentValues = new ContentValues();
contentValues.put( tên trường , giá trị);
db.insert( tên bảng , null , contentValues );
}
c. Cập nhật dữ liệu
Phương thức update của SQLiteDatabase để cập nhật dữ liệu trong bảng theo một điều kiện bất kỳ nào đó. Phương thức này trả về số dòng bị ảnh hưởng. Ví dụ nếu có 3 dòng bị thay đổi thì nó trả về 3, nếu không có dòng nào bị ảnh hưởng thì nó trả về 0.
Đầu tiên gọi phương thức getWritableDatabase mở cơ sở dữ liệu lên để đọc và ghi.
Sau đó tạo một đối tượng thuộc ContentValues để có thể put các giá trị vào trong các trường.
Sau đã put hết giá trị rồi chúng ta gọi phương thức update() và truyền vào 4 tham số:
- Tham số 1: tên bảng.
- Tham số 2: đối tượng muốn chỉnh sửa với giá trị mới.
- Tham số 3: tập các điều kiện lọc.
- Tham số 4: tập các giá trị của điều kiện lọc, thường để mặc định là null.
public long update (Kiểu_dữ_liệu giá_trị) {
SQLiteDatabase db = this.getWritableDatabase();
ContentValues contentValues = new ContentValues();
contentValues.put( tên trường , giá trị);
String where = tên_trường " = " giá_trị ;
db.update( tên bảng , contentValues , where , whereArgs );
}
Khoa Tùng Dương - CT1901C – Xây dựng ứng dụng quản lý bàn ăn trên thiết bị di động android 31
d. Xóa dữ liệu
Chúng ta sử dụng phương thức delete của SQLiteDatabase để xóa dữ liệu trong bảng theo một điều kiện bất kỳ nào đó. Phương thức này trả về số dòng bị ảnh hưởng. Muốn xóa toàn bộ dữ liệu trong bảng thì ta truyền null vào 2 đối số cuối.
- Tham số 1: tên bảng.
- Tham số 2: tập điều kiện lọc.
- Tham số 3: tập các giá trị của điều kiện lọc, thường được để mặc định là null.
public long delete (Kiểu_dữ_liệu giá_trị){
SQLiteDatabase db = this.getWritableDatabase();
String where = tên_trường " = " giá_trị ; db.delete( tên bảng , where , whereArgs );
}
f. Lấy danh sách dữ liệu
Để lấy danh sách dữ liệu, ta dùng phương thức rawQuery được dùng để thực hiện truy vấn và trả về kết quả phù hợp thông qua một đối tượng Cursor.
Đối tượng cursor được hiểu đơn giản là một con trỏ, trỏ đến kết quả trả về của câu truy vấn, con trỏ này trỏ đến cái bảng trả về của câu truy vấn.
public void Name ( tham số ) {
SQLiteDatabase db = this.getWritableDatabase();
String sql = " SELECT * [hoặc các trường] FROM " tên_bảng;
Cursor cursor = db.rawQuery( sql , null );
cursor.moveToFirst();
while (! cursor.isAfterLast()) { // truy vấn dữ liệu sử dụng
cursor.getString(cursor.getcolumnIndex( tên trường ));
hoặc cursor.getInt(cursor.getcolumnIndex( tên trường ));
cursor.moveToNext();
} }
- moveToFirst(): di chuyển đến hàng đầu tiên từ tập kết quả.
- moveToNext(): di chuyển đến hàng kế tiếp từ tập kết quả.
- isAfterLast(): kiểm tra đã đến cuối kết quả chưa.
Khoa Tùng Dương - CT1901C – Xây dựng ứng dụng quản lý bàn ăn trên thiết bị di động android 32
- get<type>(): trả về giá trị kiểu <type> tại cột xác định của hàng tại vị trí con trỏ hiện tại. Các phương thức phổ biến gồm getString(), getInt().