Lưu Trữ Dữ Liệu Với SQLite (Thực Hành) | How Kteam
Có thể bạn quan tâm
Dẫn nhập
Ở các bài học trước, chúng ta đã cùng nhau TÌM HIỂU VỀ SQLITE, con trỏ và các lớp Java làm việc với SQLite trong Android. Tuy nhiên tất cả mới chỉ là lý thuyết.
Trong bài học này, chúng ta sẽ thực hành làm một ứng dụng lưu tên và xóa tên đơn giản.
Nội dung
Để đọc hiểu bài này tốt nhất các bạn nên có kiến thức cơ bản về các phần:
- CẤU TRÚC CƠ BẢN CỦA MỘT CHƯƠNG TRÌNH ANDROID.
- Đã đọc bài trước, hay ít nhất là biết SQLITE LÀ GÌ?.
- Sẵn sàng để thực hành code.
Trong bài học này, chúng ta sẽ cùng tìm hiểu các vấn đề:
- Viết một ứng dụng sử dụng SQLite.
- Truy cập vào database bằng ứng dụng bên thứ 3.
Viết ứng dụng cơ bản sử dụng SQLite
Trong phần này chúng ta cùng điểm qua về DAO(Data Access Object). DAO có nhiệm vụ xử lý kết nối với Database để truy cập và chỉnh sửa dữ liệu. DAO cũng có nhiệm vụ chuyển đổi từ đối tượng trong database thành đối tượng Java tương ứng.
Tuy nhiên sử dụng DAO không phải lúc nào cũng hợp lý. Đôi khi dùng trực tiếp thẳng vào database, hoặc sử dụng Content Provider thì tốt hơn (vì đỡ phải tạo model).
Bước 1: Tạo project với các thông tin như hình vẽ (tên là SQLiteEx):
- Và chọn mức API là 13:
Bước 2: Tạo lớp HowkSQLiteHelperkế thừa từ SQLiteOpenHelper:
- HowkSQLiteHelper.java
Lớp SQLiteOpenHelper này có tác dụng định nghĩa các câu truy vấn, cũng như làm nền móng cho việc giao tiếp với SQLite. Như các bạn đã thấy, chúng ta có truy vấn để tạo bảng: (DATABASE_CREATE), và tên các cột, bảng, file database.
- Đồng thời tạo class Person.java
Bước 3: Tạo lớp PeopleDataSource. Lớp này không kế thừa từ đâu cả, mà chỉ có nhiệm vụ xử lý dữ liệu từ Database nhờ sự trợ giúp của lớp Helper phía trên, và chứa các phương thức để lấy dữ liệu ra dạng Java object:
package com.howkteam.sqliteex; import android.content.ContentValues; import android.content.Context; import android.database.Cursor; import android.database.SQLException; import android.database.sqlite.SQLiteDatabase; import android.util.Log; import java.util.ArrayList; import java.util.List; public class PeopleDataSource { // Các trường database. private SQLiteDatabase database; private HowkSQLiteHelper dbHelper; private String[] allColumns = {HowkSQLiteHelper.COLUMN_ID, HowkSQLiteHelper.COLUMN_PERSON}; public PeopleDataSource(Context context) { dbHelper = new HowkSQLiteHelper(context); } public void open() throws SQLException { database = dbHelper.getWritableDatabase(); } public void close() { dbHelper.close(); } public Person createPerson(String pName) { ContentValues values = new ContentValues(); values.put(HowkSQLiteHelper.COLUMN_PERSON, pName); long insertId = database.insert(HowkSQLiteHelper.TABLE_PEOPLE, null, values); Cursor cursor = database.query(HowkSQLiteHelper.TABLE_PEOPLE, allColumns, HowkSQLiteHelper.COLUMN_ID + " = " + insertId, null, null, null, null); cursor.moveToFirst(); Person newPerson = cursorToPerson(cursor); cursor.close(); return newPerson; } public void deletePerson(Person p) { long id = p.getId(); Log.e("SQLite", "Person entry deleted with id: " + id); database.delete(HowkSQLiteHelper.TABLE_PEOPLE, HowkSQLiteHelper.COLUMN_ID + " = " + id, null); } public List<Person> getAllPeople() { List<Person> people = new ArrayList<Person>(); Cursor cursor = database.query(HowkSQLiteHelper.TABLE_PEOPLE, allColumns, null, null, null, null, null); cursor.moveToFirst(); while (!cursor.isAfterLast()) { Person person = cursorToPerson(cursor); people.add(person); cursor.moveToNext(); } // Nhớ đóng con trỏ lại nhé. cursor.close(); return people; } private Person cursorToPerson(Cursor cursor) { Person person = new Person(); person.setId(cursor.getLong(0)); person.setName(cursor.getString(1)); return person; } }Bước 4: Quay lại sửa file activity_main.xml lại như sau:
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical"> <LinearLayout android:id="@+id/group" android:layout_width="wrap_content" android:layout_height="wrap_content"> <Button android:id="@+id/add" android:layout_width="wrap_content" android:layout_height="wrap_content" android:onClick="onClick" android:text="Add New"/> <Button android:id="@+id/delete" android:layout_width="wrap_content" android:layout_height="wrap_content" android:onClick="onClick" android:text="Delete First"/> </LinearLayout> <ListView android:id="@android:id/list" android:layout_width="match_parent" android:layout_height="wrap_content" /> </LinearLayout>Bước 5: Chỉnh sửa lại lớp MainActivity, kế thừa cho nó từ ListActivity và tiến hành đổ dữ liệu:
package com.howkteam.sqliteex; import android.app.ListActivity; import android.os.Bundle; import android.view.View; import android.widget.ArrayAdapter; import java.util.List; import java.util.Random; public class MainActivity extends ListActivity { private PeopleDataSource datasource; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); datasource = new PeopleDataSource(this); datasource.open(); List<Person> values = datasource.getAllPeople(); // use the SimpleCursorAdapter to show the // elements in a ListView ArrayAdapter<Person> adapter = new ArrayAdapter<Person>(this, android.R.layout.simple_list_item_1, values); setListAdapter(adapter); } // Tạo sự kiện khi click vào các nút trong activity_main.xml public void onClick(View view) { @SuppressWarnings("unchecked") ArrayAdapter<Person> adapter = (ArrayAdapter<Person>) getListAdapter(); Person person = null; switch (view.getId()) { // Thêm người vào danh sách. case R.id.add: String[] people = new String[]{"Alice", "Bob", "Mallory"}; int nextInt = new Random().nextInt(3); person = datasource.createPerson(people[nextInt]); adapter.add(person); break; // Xóa người đầu tiên khỏi danh sách. case R.id.delete: if (getListAdapter().getCount() > 0) { person = (Person) getListAdapter().getItem(0); datasource.deletePerson(person); adapter.remove(person); } break; } adapter.notifyDataSetChanged(); } @Override protected void onResume() { datasource.open(); super.onResume(); } @Override protected void onPause() { datasource.close(); super.onPause(); } }Ở đây mình xin giải thích một chút:
- Chúng ta tạo một mảng gồm 3 phần tử: Alice, Bob và Mallory. Mỗi khi nhấn nút Add thì sẽ thêm ngẫu nhiên một trong 3 phần tử này vào danh sách.
- Khi nhấn Delete thì danh sách sẽ bỏ phần tử đầu tiên.
- Sau khi tắt app, bật lại, ứng dụng vẫn sẽ load danh sách như bình thường. Đó là vì nó đã được lưu trong SQLite rồi.
Chạy app, và chúng ta có:
Bước 6: Bước này chỉ dành cho những máy đã root .Các bạn có thể sử dụng một app ngoài như SQLite Editor để vọc sâu vào trong app SQLiteEx, các bạn sẽ thấy có file db được tạo ra và các bảng tương ứng:
Kết luận
Qua bài này chúng ta đã nắm được Cách sử dụng SQLite, các viết lệnh truy vấn, và lấy dữ liệu từ trong database.
Bài sau chúng ta sẽ THỰC HÀNH SQLITE VỚI SUGARORM
Cảm ơn các bạn đã theo dõi bài viết. Hãy để lại bình luận hoặc góp ý của mình để phát triển bài viết tốt hơn. Đừng quên “Luyện tập – Thử thách – Không ngại khó”.
Tải xuống
Tài liệu
Nhằm phục vụ mục đích học tập Offline của cộng đồng, Kteam hỗ trợ tính năng lưu trữ nội dung bài học Lưu trữ dữ liệu với SQLite (Thực hành) dưới dạng file PDF trong link bên dưới.
Ngoài ra, bạn cũng có thể tìm thấy các tài liệu được đóng góp từ cộng đồng ở mục TÀI LIỆU trên thư viện Howkteam.com
Đừng quên like và share để ủng hộ Kteam và tác giả nhé!
Thảo luận
Nếu bạn có bất kỳ khó khăn hay thắc mắc gì về khóa học, đừng ngần ngại đặt câu hỏi trong phần BÌNH LUẬN bên dưới hoặc trong mục HỎI & ĐÁP trên thư viện Howkteam.com để nhận được sự hỗ trợ từ cộng đồng.
CỘNG ĐỒNG HỎI ĐÁP HOWKTEAM.COM GROUP THẢO LUẬN FACEBOOKTừ khóa » Cách Sử Dụng Sqlite
-
Giới Thiệu SQLite Và Thực Hành Lệnh SQL
-
Sử Dụng SQLite Trong Android (phần 1)
-
Hướng Dẫn Tự Học SQLite Từ Cơ Bản Tới Nâng Cao
-
Sử Dụng SQLite Database Trong ứng Dụng Android - Viblo
-
[Android Cơ Bản] Sử Dụng Sqlite Bằng Phần Mềm DB Browser For ...
-
SQLite Căn Bản Và Nâng Cao - Freetuts
-
Làm Thế Nào Và Khi Nào Sử Dụng Sqlite
-
Học SQLite Cơ Bản Và Nâng Cao
-
Sử Dụng SQLite Với C/C++
-
Hướng Dẫn Cài đặt Và Sử Dụng SQLite Trên Ubuntu 20.04 - CloudViet
-
Bài 1: SQlite Là Gì? Ưu Và Nhược điểm Của SQLite - Học SQLite Cơ Bản
-
Hướng Dẫn Tải Và Cài đặt Sqlite - Team Việt Dev
-
Lưu Dữ Liệu Bằng SQLite | Android Developers
-
Bài Tập 31: Cách Sử Dụng SQLite Trong Android