Cách dùng SQLite trong Android
Tất cả các ví dụ code mình đều giả sử thao tác trên một sơ sở dữ liệu lưu trữ thông tin sinh viên với 5 trường: _id, full_name, student_id, gender, year Làm việc với SQLite, ta thường sử dụng 2 class sau: SQLiteOpenHelper : dùng để tạo, update và đóng/mở kết nối DB SQLiteDatabase : ...
Tất cả các ví dụ code mình đều giả sử thao tác trên một sơ sở dữ liệu lưu trữ thông tin sinh viên với 5 trường: _id, full_name, student_id, gender, year
Làm việc với SQLite, ta thường sử dụng 2 class sau:
SQLiteOpenHelper: dùng để tạo, update và đóng/mở kết nối DB SQLiteDatabase: dùng thực thi các câu lệnh query SQL trên một DB
Class này có 2 method khởi tạo:
- SQLiteOpenHelper(Context context, String name, SQLiteDatabase.CursorFactory factory, int version)
- SQLiteOpenHelper(Context context, String name, SQLiteDatabase.CursorFactory factory, int version, DatabaseErrorHandler errorHandler)
Tuy nhiên chúng ta chủ yếu làm việc với method đầu tiên:
- Context context: Context là một lớp trừu tượng của hệ thống, chứa thông tin môi trường ứng dụng, cung cấp các phương thức để có thể tương tác với hệ điều hành, giúp chúng ta dễ dàng truy cập và tương tác tới các tài nguyên của hệ thống...
- String name: Tên của DB
- CursorFactory factory: chúng ta thường để mặc định là null
- Int version: version của DB
Khi khởi tạo một object của class này, ta cần override 2 methods:
onCreate(): Gọi khi cơ sở dữ liệu được tạo ra lần đầu tiên. (chú ý: khi khởi tạo bảng, ta phải đặt tên khóa chính là _id) onUpgrade(): Được gọi là khi cơ sở dữ liệu cần phải được nâng cấp. Dùng khi ứng dụng có nhiều phiên bản DB thêm vào. Class này có 2 methods getReadableDatabase() (chỉ đọc) và getWriteableDatabase() (cho phép ghi đọc). Thông qua chúng, ta có thể tạo ra một đối tượng SQLiteDatabase
Class này có các methods sau để làm việc:
- insert()
- update()
- delete()
- execSQL()
- query()
2.1. query()
Gồm có các parameters:
Câu lệnh truy vấn trả về một đối tượng Cursor
2.2. insert()
Method này để insert một bản ghi vào CSDL. Ví dụ: Giả sử ta có db là 1 object của SQLiteDatabase
ContentValues cv = new ContentValues(); cv.put("full_name", "Tran Trong Thien Ky"); cv.put("student_id", "SE03150"); cv.put("gender", 1); cv.put("year", 22);
sau đó ta insert:
db.insert(DATABASE_NAME,null,cv);
2.3. update()
Ví dụ: Giả sử ta có 1 object là sinh viên là:
- _id = 2
- full_name = “Tran Trong Thien Ky”
- student_id = “SE03152”
- gender = 1
- year = 20
và một object SQLiteDatabase là: sqlDB Giờ chúng ta muốn update bản ghi này với giá trị year = 21:
Cursor cursor = null; cursor = sqlDB.query(TABLE_NAME, null, "student_id = " + studentID, null, null, null, null); cursor.moveToFirst(); Student st = new Student(cursor.getInt(0),cursor.getString(1), cursor.getString(2), cursor.getInt(3), 21);
Trên đây, ta đã lấy được khóa chính _id: cursor.getInt(0), sau đó gán nó cho thuộc tính id của đối tượng st. Đây chính điều kiện update:
ContentValues cv = new ContentValues(); cv.put("full_name", st.fullName); cv.put("student_id", st.studentID); cv.put("gender", st.gender); cv.put("year", st.year); sqlDB.update(TABLE_NAME, ct, "_id = " + st.id, null );
3. ContentValues
là Object cho phép xác định key/value, sử dụng để insert và update các mục CSDL: Ví dụ:
ContentValues cv = new ContentValues(); cv.put("full_name", "Tran Trong Thien Ky"); cv.put("student_id", "SE03150"); cv.put("gender", 1); cv.put("year", 20);
Nếu muốn thêm 2 dòng, ta không cần tạo object ContentValues mới mà chỉ cần:
ContentValues cv = new ContentValues(); cv.put("full_name", "Tran Trong Thien Ky"); cv.put("student_id", "SE03150"); cv.put("gender", 1); cv.put("year", 20); cv.put("full_name", "Tran Van Tuan"); cv.put("student_id", "SE03152"); cv.put("gender", 0); cv.put("year", 21);
4. Cursor
Hiểu một cách nôm na nó là một con trỏ, trỏ đến kết quả của câu truy vấn. Ví dụ: Cursor cursor = db.query(TABLE_NAME, null, null, null, null, null, null);
Method cursor.getCount() trả về số dòng của bảng, cursor.moveToFirst() để bắt đầu từ đầu table, cursor.moveToNext() để đọc sang dòng tiếp theo, cursor.isAfterLast() trả về giá trị true khi con trỏ ở cuối table và không còn dòng nào nữa. Để lấy ra thông tin, ta sử dụng các method: cursor.getString(), cursor.getInt()
Trên đây chúng ta đã được tìm hiểu cơ bản cách dùng SQLite trong android, các bạn có thể áp dụng để viết các app cơ bản đọc ghi dữ liệu nhé. Link tham khảo: http://www.vogella.com/tutorials/AndroidSQLite/article.html