Bài 4: SQLite trong lập trình Android

Vậy là chúng ta đã đi qua 3 cách lưu trữ trong lập trình Android rồi đúng không nào, nào là : Shared Preferences, Internal Storage, External Storage, còn hôm nay là bài cuối cùng chúng ta sẽ đi tìm hiểu về cách lưu trữ cuối cùng đó là lưu vào database.

Đây là bài rất quan trọng và cần thiết phải biết đến đó các bạn bởi vì nó là kiến thức bắt buộc, đi làm mà không biết thằng này thì xin việc cũng hơi khó rồi đó.

Bài này mình dự kiến sẽ có đến hơn 1 video để hướng dẫn đó các bạn bởi vì kiến thức về Database là khá nhiều trong cụm từ “CRUD” :

  • C: Create
  • R: Read
  • U: Update
  • D: Delete

Nghe thấy là đã nhiều cái để học rồi đúng không các bạn, nếu học xong bài này thì chúng ta có thể làm được những dự án về lưu dữ liệu rồi đó ví dụ ứng dung: quản lí chi tiêu… rồi đó.

Vậy trong lập trình Android thì dùng hệ cơ sở dữ liệu nào để lưu trữ thì mình xin nói luôn đó là SQLite nhé các bạn, đây là cơ sở dữ liệu mà Androdi tích hợp sẵn và bạn rất dễ sử dụng chứ không khó khăn như việc sử dụng Mysql, SqlServer…Xong bài này mình sẽ làm một ứng dụng gì đó thật kinh điển ha 😛

Thôi! Chúng ta bay vào tìm hiểu nó ngay cho nóng nào!

SQLite trong android là gì?

Là cơ sở dữ liệu nhỏ tương tự như MySQL, SQL server… với đặc điểm là nhỏ , gọn và nhẹ.Trong lập trình android thì SQLite sẽ được lưu trong ổ đĩa  của thiết bị chứ không phải lưu trên server hay bất kì nơi nào khác.

Việc truy vấn trong SQLite sẽ tương tự như các hệ cơ sở dữ liệu khác nên bạn sẽ không phải gặp khó khăn gì khi sử dụng và bạn cũng chẳng cần user , mật khẩu khi truy cập vào trong database gì cả.

Tại sao dùng SQLite để lưu trữ

Tiêu đề trên có vẽ hơi “ngu người” 1 tí nhỉ :D, đơn giản là nó dùng để lưu trữ thôi cơ mà nó so với 3 cách chúng ta đã học ở bài trước thì sao nhỉ? Nghe đến Database là biết nó thường lưu những gì rồi đúng không he, SQLite sẽ dùng để lưu các đối tượng, model dưới dạng bảng và sau đó là truy xuất để lấy ra một cách nhanh chóng.

Với các bài trước ta học thì việc lưu trữ một đối tượng khá là khó, với Shared Preferences thì bạn phải chuyển nó sang String rồi sau đó dưới dạng KeyValue, còn với kiểu lưu External hay Internal  thì lại khá cực.

Bây giờ có SQLite sẽ giải quyết cho bạn vấn đề này, nó được sử dụng khi nào các bạn biết không?

SQLite được sử dụng khi nào?

Nó được sử dụng khi yêu cầu bài toán đưa ra là hãy lưu những dữ liệu lớn ở dạng Object, dạng text… xuống thiết bị để có thể lấy ra bất kỳ khi nào.Dữ liệu lớn ở đây không phải là nặng đâu nhé các bạn mà nó nhiều ấy vì dữ kiệu dạng text, object lưu xuống cũng khá nhẹ cho dù nó nhiều.

Mình sẽ đưa ra những ví dụ kinh điển bạn sẽ hình dung ra ngay như sau:

Ex1:

Ứng dụng ZingMp3 tiếp đi ha, bạn sẽ có chức năng là lưu bài hát vào danh sách yêu thích đúng không? Một bài hát thường sẽ có các thuộc tính như: tên, url, lyric, ca sĩ… Đây là một Oject đúng không nào? Ứng dụng sẽ lưu danh sách bài hát yêu thích vào database để sau này truy xuất ta hiển thị thôi.

Ex2:

Ứng dụng có chức năng lưu trữ lịch sử tìm kiếm thì cũng có thể sử dụng sql để lưu lại danh sách này.

Ex3:

Ứng dụng báo thức có thể sử dụng sqlite để lưu danh sách các báo thức đã cài đặt.

Tuy nhiên theo mình thấy thì SQLite lưu trữ dữ liệu không được lớn như những hệ cơ sở dữ liệu khác vì nó tích hợp trong thiết bị android mà, nếu quá nặng thì ứng dụng đó sẽ rất chậm.Nói gì nói thì nó chỉ đáp ứng với khoảng dữ liệu nhỏ vài ngàn dòng gì đó thôi chứ lớn quá thì nó sẽ không dùng SQLite để lưu đâu các bạn.

Cách sử dụng SQLite trong lập trình Android

Tương tự như các hệ quản trị cơ sở dữ liệu khác thì khi thao tác với Database thì bạn sẽ có những hành động cổ điển đó là CRUD mà mình đã nói ở trên rồi, ở loạt này chúng ta cũng sẽ tìm hiểu những cái chính đó thôi chứ không đi quá sâu được vì còn rất nhiều bài ở đằng sau nữa.

Bài toán mình đưa ra là lưu lại danh sách Student vào trong SQLite, chính vì thế mình sẽ đi phân tích tất cả những thuộc tính mà chúng ta sẽ phải khởi tạo cho lớp Student từ đó đi xây dựng Database cho dữ liệu này.

Dự kiến class model Student.java sẽ có bao gồm những thuộc tính như sau: id, name, number, email, address.

Vậy class Student.java sẽ có những thuộc tính và các phương thức getter, setter sau:


Vậy bản mô phỏng các thuộc tính trong Table Student khi lưu vào database sẽ như sau:

FieldTypeKey
idintprimary key
nameText
numberText
emailText
addressText

Vậy quy trình chúng ta sẽ làm làm gì nhỉ? Khởi tạo một database có tên là “student_list“, một table tên là “student” và sau đó là có câu truy vấn CRUD.

Đây là class DBManager.java , ở đây mình đã khởi tạo một SQLite tên là student_list và một table là student, và sau đó là tất cả các phương thức truy vấn và bên dưới mình sẽ giải thích cụ thể cho các bạn hiểu nhé.


Đây là class chúng ta sẽ thao tác với SQLite nhé các bạn, bạn muốn làm gì chỉ cần khởi tạo đối tượng DBManager rồi gọi phương thức tương ứng ra thôi.Tuy nhìn thấy nó nhiều vậy thôi chứ thực chất nó không có gì ghê gớm cả, mình sẽ giải thích từng phương thức cho các bạn hiểu ngay thôi.

Để sử dụng được SQLite trong Android thì bạn phải tạo một Class implement class SQLiteOpenHelper, đây là điều bắt buộc nhé và khi implement class này thì bạn phải ghi đè các phương thức onCreate() và phương thức onUpgrade() và phải khởi tạo constructor  cho class đó.Ở ví dụng trên là mình tạo class DBManager và implement SQLiteOpenHelper và các phương thức mà mình phải ghi đè đó là:


Và constructor:


Tại sao phải ghi đè các phương thức trên nhỉ? Như chúng ta đã biết thì một quá trình lưu một Student xuống database thì phải trải qua các bước là:

  • Tạo database
  • Tạo table
  • Add student

Vây ở trên constructer DBManager() chính là quá trình tạo database, còn hàm onCreate() chính là quá trình tạo table.Còn thằng OnUpdate() sẽ được gọi khi có một sự thay đổi liên quan đến cấu trúc dữ liệu như thêm 1 table, xoá table…

Vậy nó được chạy khi nào, bây giờ nếu như ban gọi như sau trong MainActivity:


Thì sẽ chẳng có chuyện gì xảy ra cả đâu nhé, 2 phương thức trên chẳng cái nào chạy cả đâu và nó sẽ chạy khi các bạn thực hiện các lệnh truy vấn như thêm, tìm kiếm, sửa… và sau đó nó sẽ chẳng chạy vào nữa nếu như nó đã được gọi 1 lần.

Dưới đây là các phức mà chúng ta sẽ viết tuỳ theo mục đích của mình, cùng đi phân tích nhé:

Add – Thêm mới


Phương thức trên dùng để thêm một Student vào trong sqlite, đầu tiên nó sẽ gọi phương thức getWritableDatabase() để mở database lên để đọc và ghi, nếu như ở đây database chưa được tạo thì phương onCreate() sẽ được gọi rồi sau đó mới thực hiện mở database lên.

Sau đó bạn tạo một đối tượng thuộc ContentValues để có thể put các giá trị vào trong các column, thằng này kiểu tương tự như Editor mà chúng ta đã học ở bài Shared Preferences ấy các bạn.


Ở trên mình đang đưa vào column “name” với giá trị là tên của student (student.getName()),

Sau khi đã put hết giá trị rồi bạn gọi phương thức insert() và truyền vào các params là xong.Nhớ là nên đóng database lại mỗi lần mở nó ra nhé các bạn!

Read – Đọc

Sau khi đã lưu xuống được một danh sách student thì chúng ta tiến hành đọc lên thôi:


Ở đây chúng ta sẽ get thông tin một sinh viên ra theo id nhé các bạn, bạn sẽ thực hiện các câu query quen thuộc rồi lấy ra thôi.

Lấy toàn bộ danh sách Student thì làm như sau:

Update – Cập nhật


Ở trên mình đang thay đổi tên của một Student với điệu kiện đang xét theo id, cái này nếu bạn không hiểu mình sẽ giải thích kĩ ở trong video nhé.

Delete – Xoá


Câu lệnh trên để xoá đi một Student khi theo điệu kiện là id luôn.

Lấy ra tổng số dòng trong Table


Vẫn là những câu truy vấn cổ điên thôi đúng không nào? Nói chung cũng không có gì khó cả.Mình sẽ nói chi tiết hơn trong video bên dưới và kèm theo mã nguồn của dự án các bạn xem nếu có thắc mắc hay ý kiến gì cứ để lại comment nhé.

Video hướng dẫn SQLite

Download Source Code

Tiếp theo

Chúc các bạn học tập vui vẽ!

Bài 4: SQLite trong lập trình Android
5 (100%) 5 votes

7 Comments

  1. Tuấn April 20, 2017
  2. Hiếu April 20, 2017
  3. Tuan April 21, 2017
  4. tetua June 8, 2017
    • trangchongcheng June 8, 2017
  5. Tùng June 29, 2017
    • trangchongcheng June 30, 2017

Add Comment

*