Friday, September 4, 2015

Sử dụng SQLite trong Android phần 1

Bài tập này Tôi sẽ hướng dẫn các bạn cách sử dụng SQLite trong Android.
Thay vì lưu trữ bằng text file, XML hay SharePreference thì bạn cũng có thể lưu trữ thông tin bằng SQLite. SQLite đã được tích hợp sẵn trong Android SDK.
Trong bài này các bạn sẽ học các phần sau:
1) Cách tạo / xóa một cơ sở dữ liệu SQLite trong Android
2) Cách tạo / xóa bảng trong SQLite
3) Cách thêm/ sửa/ xóa dữ liệu trong bảng
4) Cách truy vấn dữ liệu trong bảng.
– Tất nhiên còn rất nhiều chức năng khác, nhưng theo Tôi các bạn chỉ cần làm tốt 4 phần này thì có thể viết ứng dụng Android có SQLite một cách chuyên nghiệp rồi.
– Theo Tôi thì các bạn nên sử dụng công cụ SQLite Administrator: http://download.orbmu2k.de/files/sqliteadmin.zip để tạo hoàn chỉnh 1 CSDL sau đó kéo thả tập tin đó vào DDMS cho lẹ (cái này bạn tải về và tự tạo, rồi kéo thả vào DDMS). Còn các hướng dẫn dưới này Tôi muốn giúp các bạn hiểu được sâu xa bên trong (hướng programmer) CSDL SQLite.
– Giả sử các bạn cần tạo CSDL như mô tả dưới đây (qlquanlysinhvien.db):
– Bảng Lớp học (tbllop):
tbllop 
Tên cộtKiểu dữ liệuMô tả
malopTEXTKhóa chính
tenlopTEXT
sisoINTEGER
– Bảng sinh viên (tblsinhvien):
tblsinhvien
Tên cộtKiểu dữ liệuMô tả
masvTEXTKhóa chính
tensvTEXT
malopTEXTkhóa ngoại
– Để sử dụng SQLite, bạn import thư viện sau:
import android.database.sqlite.SQLiteDatabase;
———————————————————————————————————————-
1) Cách tạo / xóa một cơ sở dữ liệu SQLite trong Android:
– Tạo mới 1 CSDL:
31_sqlite_0
Khi lưu thành công, nó sẽ lưu CSDL vào:
/data/data/app/databases/<databasename>
cụ thể:
31_sqlite_1
– Nếu bạn muốn lưu trữ trên SD Card thì bắt buộc bạn phải cấp quyền giống như đã đề cập tới ở những bài trước:
<uses-permission android:name=”android.permission.WRITE_EXTERNAL_STORAGE” />
– Bạn chỉ việc lấy đường dẫn của SD Card ra rồi lưu tên CSDL vào đúng đường dẫn SD Card là ok. (Bạn tự xem lại các bài tập trước mà Tôi đã hướng dẫn cách làm).
– Xóa 1 CSDL:
31_sqlite_2
– Như trên thì ta chỉ cần gọi lệnh deleteDatabase(tên CSDL). Nếu xóa thành công thì trả vềtrue, xóa thất bại trả về false;
2) Cách tạo / xóa bảng trong SQLite:
– Ở đây các bạn sẽ tạo 2 bảng tbllop và tblsinhvien. Chú ý là chúng có mối ràng buộc toàn vẹn.
– Bạn xem cách tạo bảng lớp:
31_sqlite_3
– Bạn chú ý là tên đối tượng database (chỗ database.execSQL(sql)) là đối tượng SQLiteDatabase được tạo ra ở bước tạo CSDL. Bạn phải khai báo cho  phù hợp để ở trong hàm này cũng có thể truy suất.
– Tạo bảng sinh viên:
31_sqlite_4
– Vì bảng sinh viên có chứa khóa ngoại để tham chiếu tới bảng lớp, nên bạn phải chú ý dòng lệnh tham chiếu ở trên.
3) Cách thêm/ sửa/ xóa dữ liệu trong bảng:
– Cách thêm một dòng dữ liệu vào trong bảng:
+ Dùng đối tượng ContentValues để đưa dữ liệu vào bảng. Đối tượng này có các phương thứcput (tên cột , dữ liệu)
+ Sau đó gọi phương thức insert để đưa đối tượng (dòng này) vào bảng.
+ Bạn chú ý là phương thức insert có rất nhiều loại đối số khác nhau, nhưng ở đây Tôi chỉ nói 1 loại đơn giản nhất (các kiểu khác bạn tự tìm hiểu thêm). Loại mà Tôi muốn đề cập tới đó là không liên quan gì tới kiểm tra các điều kiện, chỉ cần đưa đối tượng ContentValues vào insertlà bạn sẽ có được 1 dòng mới:
31_sqlite_5
– Nhìn vào đoạn code ở trên, bạn thấy đó Tôi sử dụng cả 3 cột maloptenlopsiso của bảng lớp học:
values.put(“malop“,”DHTH7C”) ; tức là đưa giá trị “DHTH7C” vào cột malop.
– dòng lệnh database.insert(“tbllop“,null,values); Đối số 1 là tên bảng, đối số 2 bạn truyền null, đối số 3 bạn truyền đối tượng values
– Nếu thêm thành công thì sẽ trả về giá trị khác -1. Nếu bằng -1 là thất bại.
– Cách cập nhật dữ liệu:
– Ta dùng hàm update để cập nhật dữ liệu theo một điều kiện bất kỳ nào đó.
public int update (String table, ContentValues values,    String whereClause, String[]whereArgs)
– Đối số 1 là tên bảng
– Đối số 2 là đối tượng muốn chính sửa (với giá trị mới)
– Đối số 3 là tập các điều kiện lọc (dùng dấu chấm hỏi ? để tạo điều kiện lọc)
– Đối số 4 là tập các giá trị của điều kiện lọc (lấy theo đúng thứ tự)
– Hàm 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.
Ví dụ: Tôi viết hàm chỉnh  sửa (bạn cũng nên tách thành từng hàm giống vậy):
31_sqlite_6
– Hàm trên : Đối số 1 là mã nào muốn được chỉnh sửa . Đối số 2 là giá trị mới. Cụ thể bảng lớp của chúng ta có 3 cột: mã lớp, tên lớp và sĩ số, nhưng mà Tôi chỉ muốn chỉnh sửa Tên lớp mà thôi. Do đó bạn thấy như vậy (ở đây Tôi chủ ý viết khuyết như vậy để các bạn hiểu rằng không nhất thiết phải sử dụng hết các cột).
– Xóa dữ liệu:
– Ta dùng hàm delete để xóa:
public int delete (String table,       String whereClause,       String[] whereArgs) 
– Đối số 1 là tên bảng
– Đối số 2 là tập điều kiện lọc (dùng ? để tạo)
– Đối số 3 là tập các giá trị của điều kiện lọc
– Hàm 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:
31_sqlite_7
– Muốn xóa theo 1 mã nào đó:
31_sqlite_8

No comments:

Post a Comment