Bài giảng Phát triển ứng dụng trên thiết bị di động - Chương 9: Databases and SQL - Lương Trần Hy Hiến

pdf 39 trang cucquyet12 4011
Bạn đang xem 20 trang mẫu của tài liệu "Bài giảng Phát triển ứng dụng trên thiết bị di động - Chương 9: Databases and SQL - Lương Trần Hy Hiến", để tải tài liệu gốc về máy bạn click vào nút DOWNLOAD ở trên

Tài liệu đính kèm:

  • pdfbai_giang_phat_trien_ung_dung_tren_thiet_bi_di_dong_chuong_9.pdf

Nội dung text: Bài giảng Phát triển ứng dụng trên thiết bị di động - Chương 9: Databases and SQL - Lương Trần Hy Hiến

  1. Ths. Lương Trần Hy Hiến Khoa Công Nghệ Thông Tin Trường Đại học Sư phạm TP.HCM
  2. Content Provider SQLite Truy vấn, Xử lý dữ liệu
  3. 1. Content Provider 2. Content URI 3. ContentResolver 4. Xây dựng ContentProvider 3
  4. Content Provider: . Quản lý việc truy nhập dữ liệu chung trên hệ thống từ các ứng dụng khác nhau, gồm một hay nhiều bảng dữ liệu. . Thể hiện dữ liệu ở dạng bảng quan hệ: ▪ Cột: thể hiện trường dữ liệu (hoặc thuộc tính dữ liệu) ▪ Dòng: một thể hiện dữ liệu word app id frequency locale _ID mapreduce user1 100 en_US 1 precompiler user14 200 fr_FR 2 applet user2 225 fr_CA 3 const user1 255 pt_BR 4 int user5 100 en_UK 5 4
  5. Content Provider: . ContentProvider được cung cấp sẵn trong hệ thống: ▪ Hệ thống báo thức (Alarm) ▪ Nội dung trình duyệt (Browser) ▪ Danh bạ (Contacts) ▪ Lịch (Calendar) ▪ Tập tin tài liệu (Document) ▪ Tập tin đa truyền thông (Media Store) ▪ Tùy chỉnh hệ thống (Setting) ▪ Điện thoại (Telephony) ▪ Từ điển người dùng (UserDictionary) ▪ Hộp thư thoại (VoiceMailContract) 5
  6. Content URI: . Đối tượng cho phép định nghĩa cách thức truy xuất dữ liệu trên Content Provider, bao gồm: ▪ Authority: Tên đầy đủ của Provider. ▪ Path: tên bảng tồn tại trong Provider . Ví dụ về Content URI truy xuất dữ liệu danh bạ: ▪ ContactsContract.Data.CONTENT_URI ▪ content://com.android.contact/data ▪ Trong đó:  content: scheme  com.android.contact: authority  data: tên bảng 6
  7. Đối tượng cho phép truy xuất dữ liệu và thao tác trên Content Provider, bao gồm: . Query . Insert . Update . Delete Truy xuất đối tượng ContentResolver thông qua phương thức: . getContentResolver(); 7
  8. Phương thức Query: . Cú pháp: query(Uri, projection, selection, selectionArgs, sortOrder) ▪ Uri: đường dẫn truy xuất dữ liệu. - URI ▪ Projection: mảng tên các trường dữ liệu (cột) cần truy xuất. – String[] ▪ Selection: câu điều kiện truy vấn. - String ▪ SelectionArgs: mảng biến tham số cho câu điề kiện truy vấn. – String[] ▪ SortOrder: tiêu chí sắp xếp dữ liệu truy vấn (tên cột). - String . Kết quả trả về: ▪ Cursor: chứa bảng dữ liệu kết quả truy vấn. 8
  9. Phương thức Query: . Ví dụ truy xuất tất cả dữ liệu danh bạ trên thiết bị: // Định nghĩa đường dẫn truy xuất Uri uri = ContactsContract.Data.Content_URI; // Định nghĩa tham số truy vấn String projection = null; // Lấy ra tất cả các cột String selection = null; // Không có điều kiện truy vấn String selectioArgs = null; // Không có tham số truy vấn String sortOrder = null; // Sắp xếp mặc định // Đối tượng truy vấn ContentResolver cr = this.getContentResolver(); Cursor cursor = cr.query(Uri, projection, selection, selectionArgs, sortOrder); 9
  10. Phương thức Query: . Ví dụ truy xuất dữ liệu danh bạ trên thiết bị có tên bắt đầu bằng “M” và sắp xếp theo theo ID. // Định nghĩa đường dẫn truy xuất Uri uri = ContactsContract.Data.Content_URI; // Định nghĩa tham số truy vấn String projection = null; // Lấy ra tất cả các cột String selection = Data.DISPLAY_NAME + “ like ?”; // điều kiện truy vấn String selectioArgs = { “M%”}; // Tham số truy vấn String sortOrder = Data._ID; // Sắp xếp theo ID // Đối tượng truy vấn ContentResolver cr = this.getContentResolver(); Cursor cursor = cr.query(Uri, projection, selection, selectionArgs, sortOrder); 10
  11. Phương thức Insert, Update: được thực hiện thông qua tham số dữ liệu ContentValues: . ContentValues: cho phép định nghĩa dữ liệu khi thao tác, thông qua phương thức put(Key, Value). ▪ Trong đó: ▪ Key: tên trường dữ liệu (cột). - String ▪ Value: dữ liệu tương ứng với trường dữ liệu – String, Float, Long 11
  12. Phương thức Insert: . Cú pháp: insert(Uri, ContentValues) ▪ Uri: đường dẫn truy xuất dữ liệu. - URI ▪ ContentValues: dữ liệu cần thêm vào. - ContentValues . Kết quả trả về: ▪ URI: đường dẫn đến dữ liệu vừa thêm vào 12
  13. Phương thức Update: . Cú pháp: update(Uri, ContentValues, where, selectionArgs) ▪ Uri: đường dẫn truy xuất dữ liệu. - URI ▪ ContentValues: dữ liệu cần cập nhật. - ContentValues ▪ Where: điều kiện dữ liệu được cập nhật. - String ▪ SelectionArgs: mảng tham số cho câu điều kiện. – String[] . Kết quả trả về: ▪ int: số lượng dòng dữ liệu đã được cập nhật 13
  14. Phương thức Delete: . Cú pháp: delete(Uri, ContentValues, where, selectionArgs) ▪ Uri: đường dẫn truy xuất dữ liệu. - URI ▪ Where: điều kiện dữ liệu được xóa. - String ▪ SelectionArgs: mảng tham số cho câu điều kiện. – String[] . Kết quả trả về: ▪ int: số lượng dòng dữ liệu đã được xóa. 14
  15. Việc sử dụng ContentProvider trong ứng dụng khi cần xây dựng những tính năng sau: . Cung cấp các dữ liệu hoặc tập tin đặc trưng, phức tạp cho những ứng dụng khác. . Cho phép người dùng sao chép các dữ liệu vào các ứng dụng khác. . Sử dụng và tùy chỉnh tính năng tìm kiếm dữ liệu trong ứng dụng. 15
  16. Thực hiện xây dựng ContentProvider: . Xây dựng dữ liệu ▪ Dữ liệu tập tin (not recommended) ▪ Dữ liệu có cấu trúc (SQLite) . Thiết kế các biến truy xuất dữ liệu (Contract class) ▪ Authority – Content URI (required) ▪ Biến đại diện cho các trường dữ liệu (tên cột) . Tạo lớp kế thừa và thực hiện các phương thức truy vấn dữ liệu ▪ ContentProvider (required) ▪ onCreate ▪ query - delete - insert – update . Khai báo lớp sử dụng trong Manifest thông qua thẻ ▪ Khai báo Permission 16
  17. Authority: . Định nghĩa đường dẫn truy xuất vào ContentProvider. ▪ Định nghĩa đề xuất: . .provider ▪ Ví dụ: ▪ com.htsi.t3h.onlineshop.provider . Định nghĩa đường dẫn truy xuất vào từng bảng riêng biệt trong ContentProvider. ▪ Định nghĩa đề xuất: / ▪ Ví dụ: ▪ com.htsi.t3h.onlineshop.provider/accessory ▪ com.htsi.t3h.onlineshop.provider/clothes 17
  18. UriMatcher: . Đối tượng cho phép kiểm tra các Content URI truy xuất vào Content Provider. ▪ Sử dụng dấu đại diện: ▪ * : Cho phép truy xuất vào tất cả các dạng dữ liệu. ▪ # : Cho phép truy xuất vào một dòng trong một bảng. ▪ Ví dụ định nghĩa Content URI truy xuất dữ liệu: ▪ Truy xuất tất cả các bảng trong ContentProvider  content://com.htsi.t3h.onlineshop.provider/* ▪ Truy xuất tất cả các dữ liệu trong bảng accessory  content://com.htsi.t3h.onlineshop.provider/accessory/* ▪ Truy xuất dòng dữ liệu có id = # trong bảng accessory  content://com.htsi.t3h.onlineshop.provider/accessory/# 18
  19. SQLite: . Thể hiện dữ liệu ở dạng bảng quan hệ: ▪ Cột: thể hiện trường dữ liệu (hoặc thuộc tính dữ liệu) ▪ Dòng: một thể hiện dữ liệu word app id frequency locale _ID mapreduce user1 100 en_US 1 precompiler user14 200 fr_FR 2 applet user2 225 fr_CA 3 const user1 255 pt_BR 4 int user5 100 en_UK 5 20
  20. SQLite là cơ sở dữ liệu mở được nhúng vào Android, hỗ trợ các đặc điểm về quan hệ chuẩn của cơ sở dữ liệu như cú pháp, transaction, các câu lệnh. Sử dụng SQLite không yêu cầu về thiết lập bất cứ cơ sở dữ liệu hoặc đòi hỏi quyền admin. Hỗ trợ các kiểu dữ liệu : TEXT, INTEGER, REAL, BLOB. 21
  21. Some different than normal SQL data types so please read: NULL. The value is a NULL value. INTEGER. The value is a signed integer, stored in 1, 2, 3, 4, 6, or 8 bytes depending on the magnitude of the value. REAL. The value is a floating point value, stored as an 8-byte IEEE floating point number. TEXT. The value is a text string, stored using the database encoding (UTF-8, UTF-16BE or UTF-16LE). BLOB. The value is a blob of data, stored exactly as it was input.
  22. Đường dẫn của cơ sở dữ liệu: . DATA/data/APP_NAME/databases/FILENAME Cơ sở dữ liệu SQLite cung cấp riêng cho ứng dụng tạo nó. Nếu cần cung cấp dữ liệu cho các ứng dụng khác, nên sử dụng Content Provider. 23
  23. Các bước khởi tạo cơ sở dữ liệu với SQLite: . Tạo lớp kế thừa từ lớp SQLiteOpenHelper. . Override phương thức onCreate() để tạo cơ sở dữ liệu. . Override phương thức onUpgrade() để nâng cấp cơ sở dữ liệu. . Lớp SQLiteOpenHelper cung cấp 2 phương thức getReadableDatabase() và getWriteableDatabase() để sử dụng. . Tạo đối tượng SQLiteDatabase để truy xuất dữ liệu. 24
  24. Đối tượng SQLiteOpenHelper: . Thực hiện các phương thức cần thiết cho phép khởi tạo, nâng cấp cơ sở dữ liệu. . Tạo đối tượng để truy cấp cơ sở dữ liệu (Read và Write). 25
  25. Đối tượng SQLiteDatabase: . Tạo đối tượng để truy cấp cơ sở dữ liệu (Read và Write). . SQLiteDatabase cung cấp phương thức insert(), update(), delete(), hoặc execSQL() cho phép thực hiện truy xuất dữ liệu. 26
  26. Tạo Database: Mở Database: 27
  27. Cursor: . Đối tượng dữ liệu được trả về khi thực hiện truy vấn dữ liệu trong cơ sở dữ liệu của SQLite hoặc Content Provider. . Thể hiện dữ liệu ở dạng bảng quan hệ : ▪ Cột: thể hiện trường dữ liệu (hoặc thuộc tính dữ liệu) ▪ Dòng: một thể hiện dữ liệu word app id frequency locale _ID mapreduce user1 100 en_US 1 precompiler user14 200 fr_FR 2 applet user2 225 fr_CA 3 const user1 255 pt_BR 4 int user5 100 en_UK 5 29
  28. Truy vấn cơ sở dữ liệu SQLite: . Sử dụng phương thức rawQuery(): ▪ Cursor cursor = getReadableDatabase(). rawQuery ("select * from todo where _id = ?", new String[] { id }); . Sử dụng phương thức query(): ▪ Cursor cursor = database.query (String table, String[] columns, String selection, String[] selectionArgs, String groupBy, String having, String orderBy); 30
  29. Tham số cho câu truy vấn: . String TABLE: tên của bảng cần truy vấn . String[] columns: danh sách các cột sẽ trả về dữ liệu . String selection: chứa các điều kiện truy vấn . String[] selectionArgs: danh sách các tham số phụ cho câu điều kiện . String[] groupBy: gom nhóm các cột kết quả . String[] having : bộ lọc theo điều kiện . String[] orderBy : sắp xếp theo mảng cột được chỉ định 31
  30. Ví dụ truy vấn: 32
  31. Thêm dữ liệu: 33
  32. Cập nhật dữ liệu: 34
  33. Xoá dữ liệu: . Sử dụng câu truy vấn delete truyền vào tên bảng và chỉ số của hàng cần xóa trong mệnh đề where. . Nếu mệnh đề where không có sẽ thực hiện xóa tất cả các dòng. Ví dụ: . myDatabase.delete (DATABASE_TABLE, KEY_ID + ” = “ + rowID, null); 35
  34. Một số các phương thức để điều khiển Cursor thao tác trên dữ liệu: . movetoFisrt . movetoNext . movetoPrevious . movetoPosition . getCount . getColumnIndexOrThrow . getColumnName . getColumnNames . getPosititon 36
  35. SQLiteDatabase : abase/sqlite/SQLiteDatabase.html, Cursor : abase/Cursor.html, ContentValues : ntent/ContentValues.html API: SQLiteDatabase, Cursor, ContentValues 37
  36. Firebase : 38