Khóa học Lập trình Lập trình Android Khóa học lập trình Android cơ bản Lưu trữ dữ liệu với SQLite (Thực hành)

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.

Đang xem: Giới thiệu sqlite android là gì, hướng dẫn lập trình android với database sqlite

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:

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).

Xem thêm: Uac Là Gì Và Bạn Có Nên Tắt Nó Đi Hay Không ? Cách Bật / Tắt Uac Trên Windows 10, 8, 7

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 13:

*

Bước 2: Tạo lớp HowkSQLiteHelper kế thừa từ SQLiteOpenHelper:

HowkSQLiteHelper.java

package com.gocnhintangphat.com.sqliteex;import android.content.Context;import android.database.sqlite.SQLiteDatabase;import android.database.sqlite.SQLiteOpenHelper;import android.util.Log;public class HowkSQLiteHelper extends SQLiteOpenHelper { public static final String TABLE_PEOPLE = “people”; public static final String COLUMN_ID = “_id”; public static final String COLUMN_PERSON = “person”; private static final String DATABASE_NAME = “people.db”; private static final int DATABASE_VERSION = 1; // Câu lệnh khởi tạo Database. private static final String DATABASE_CREATE = “create table ” + TABLE_PEOPLE + “( ” + COLUMN_ID + ” integer primary key autoincrement, ” + COLUMN_PERSON + ” text not null);”; public HowkSQLiteHelper(Context context) { super(context, DATABASE_NAME, null, DATABASE_VERSION); }
Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { Log.w(HowkSQLiteHelper.class.getName(), “Upgrading database from version ” + oldVersion + ” to ” + newVersion + “, which will destroy all old data”); db.execSQL(“DROP TABLE IF EXISTS ” + TABLE_PEOPLE); onCreate(db); }}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

package com.gocnhintangphat.com.sqliteex;public class Person { private long id; private String name; public long getId() { return id; } public void setId(long id) { this.id = id; } public String getName() { return name; } public void setName(String comment) { this.name = comment; } // Will be used by the ArrayAdapter in the ListView
Override public String toString() { return name; }}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.gocnhintangphat.com.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 getAllPeople() { List people = new ArrayList(); 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:

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.gocnhintangphat.com.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 values = datasource.getAllPeople(); // use the SimpleCursorAdapter to show the // elements in a ListView ArrayAdapter adapter = new ArrayAdapter(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 adapter = (ArrayAdapter) 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); 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 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.

Xem thêm: Vulgar Là Gì – Nghĩa Của Từ Vulgar

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 gocnhintangphat.com.com

Đừng quên likeshare để ủ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 gocnhintangphat.com.com để nhận được sự hỗ trợ từ cộng đồng.

Leave a Reply

Your email address will not be published. Required fields are marked *