Ở 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:
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:
package com.howkteam.sqliteex;
import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.util.Log;
publicclassHowkSQLiteHelperextendsSQLiteOpenHelper {publicstaticfinal String TABLE_PEOPLE = "people";
publicstaticfinal String COLUMN_ID = "_id";
publicstaticfinal String COLUMN_PERSON = "person";
privatestaticfinal String DATABASE_NAME = "people.db";
privatestaticfinalint DATABASE_VERSION = 1;
// Câu lệnh khởi tạo Database.privatestaticfinal String DATABASE_CREATE = "create table "
+ TABLE_PEOPLE + "( " + COLUMN_ID
+ " integer primary key autoincrement, " + COLUMN_PERSON
+ " text not null);";
publicHowkSQLiteHelper(Context context) {
super(context, DATABASE_NAME, null, DATABASE_VERSION);
}
@OverridepublicvoidonCreate(SQLiteDatabase database) {
database.execSQL(DATABASE_CREATE);
}
@OverridepublicvoidonUpgrade(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);
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
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.
package com.howkteam.sqliteex;
publicclassPerson {privatelong id;
private String name;
publiclonggetId() {
return id;
}
publicvoidsetId(long id) {
this.id = id;
}
public String getName() {
return name;
}
publicvoidsetName(String comment) {
this.name = comment;
}
// Will be used by the ArrayAdapter in the ListView@Overridepublic String toString() {
return name;
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
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.app.ListActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.ArrayAdapter;
import java.util.List;
import java.util.Random;
publicclassMainActivityextendsListActivity {private PeopleDataSource datasource;
@OverridepublicvoidonCreate(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.xmlpublicvoidonClick(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();
}
@OverrideprotectedvoidonResume() {
datasource.open();
super.onResume();
}
@OverrideprotectedvoidonPause() {
datasource.close();
super.onPause();
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
Ở đâ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.
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ê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.
Bạn ơi viết bài về import excel hoặc CSV vào cơ sở dữ liệu SQLite android đi
Bạn ơi viết bài về import excel hoặc CSV vào cơ sở dữ liệu SQLite android đi