Giới thiệu về SQLite trong Android
SQLite là một cơ sở dữ liệu SQL mã nguồn mở, lưu trữ dữ liệu vào tệp văn bản trên thiết bị. Android tích hợp sẵn SQLite, hỗ trợ đầy đủ các tính năng của cơ sở dữ liệu quan hệ. Để truy cập cơ sở dữ liệu này, bạn không cần thiết lập kết nối như JDBC hay ODBC.
Ví dụ cơ bản: Lưu dữ liệu vào SQLite
Hướng dẫn này minh họa cách tạo cơ sở dữ liệu, bảng và chèn dữ liệu trong ứng dụng Android.
Bước 1: Tạo dự án mới
Mở Android Studio, chọn File → New Project và điền thông tin cần thiết để tạo dự án.
Bước 2: Thiết kế giao diện (res/layout/activity_main.xml)
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="https://schemas.android.com/apk/res/android"
xmlns:tools="https://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity"
android:orientation="vertical">
<EditText
android:id="@+id/name"
android:layout_width="match_parent"
android:hint="Nhập tên"
android:layout_height="wrap_content" />
<EditText
android:id="@+id/salary"
android:layout_width="match_parent"
android:inputType="numberDecimal"
android:hint="Nhập lương"
android:layout_height="wrap_content" />
<Button
android:id="@+id/save"
android:text="Lưu"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
</LinearLayout>
Giao diện đơn giản với 2 ô nhập liệu và 1 nút Lưu.
Bước 3: Code MainActivity.java
package com.example.andy.myapplication;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;
public class MainActivity extends AppCompatActivity {
Button save;
EditText name, salary;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
final DatabaseHelper helper = new DatabaseHelper(this);
name = findViewById(R.id.name);
salary = findViewById(R.id.salary);
findViewById(R.id.save).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
String nameStr = name.getText().toString().trim();
String salaryStr = salary.getText().toString().trim();
if (!nameStr.isEmpty() && !salaryStr.isEmpty()) {
if (helper.insert(nameStr, salaryStr)) {
Toast.makeText(MainActivity.this, "Đã thêm", Toast.LENGTH_LONG).show();
// Xóa ô nhập sau khi lưu thành công
name.setText("");
salary.setText("");
} else {
Toast.makeText(MainActivity.this, "Không thêm được", Toast.LENGTH_LONG).show();
}
} else {
name.setError("Nhập TÊN");
salary.setError("Nhập LƯƠNG");
}
}
});
}
}
Bước 4: Code DatabaseHelper.java
package com.example.andy.myapplication;
import android.content.ContentValues;
import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
class DatabaseHelper extends SQLiteOpenHelper {
public static final String DATABASE_NAME = "MyDBName";
public static final String CONTACTS_TABLE_NAME = "SalaryDetails";
public DatabaseHelper(Context context) {
super(context, DATABASE_NAME, null, 1);
}
@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL("create table " + CONTACTS_TABLE_NAME +
"(id integer primary key, name text, salary text)");
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
db.execSQL("DROP TABLE IF EXISTS " + CONTACTS_TABLE_NAME);
onCreate(db);
}
public boolean insert(String name, String salary) {
SQLiteDatabase db = this.getWritableDatabase();
ContentValues contentValues = new ContentValues();
contentValues.put("name", name);
contentValues.put("salary", salary);
// Sử dụng insert() thay vì replace() cho việc thêm mới
long result = db.insert(CONTACTS_TABLE_NAME, null, contentValues);
return result != -1; // Trả về true nếu chèn thành công
}
}
Chạy ứng dụng
Kết nối thiết bị Android thật với máy tính. Trong Android Studio, mở file activity và nhấn biểu tượng Run. Chọn thiết bị di động và kiểm tra màn hình hiển thị.

Nhập giá trị như hình dưới và nhấn nút Lưu:

Để kiểm tra dữ liệu đã lưu, mở Device File Explorer trong Android Studio (View → Tool Windows → Device File Explorer), điều hướng đến /data/data/com.example.andy.myapplication/databases/MyDBName và xem nội dung.

Các điểm quan trọng cần nhớ
- SQLiteOpenHelper: Lớp trợ giúp quản lý tạo/cập nhật cơ sở dữ liệu
- onCreate(): Được gọi khi cơ sở dữ liệu được tạo lần đầu - nơi định nghĩa schema bảng
- onUpgrade(): Được gọi khi phiên bản cơ sở dữ liệu tăng - xử lý migration
- ContentValues: Đối tượng key-value để chèn/cập nhật dữ liệu an toàn (tránh SQL injection)
- getWritableDatabase() / getReadableDatabase(): Lấy đối tượng SQLiteDatabase để thao tác
- db.insert(): Trả về row ID của bản ghi mới, hoặc -1 nếu lỗi
Cải tiến tốt hơn (Best Practices)
- Sử dụng
PRIMARY KEY AUTOINCREMENTcho cột id - Định nghĩa tên cột/table dưới dạng
static final Stringhằng số - Đóng database/cursor sau khi dùng xong (hoặc dùng try-with-resources)
- Xử lý ngoại lệ SQLiteException
- Nên dùng Room Database (thư viện chính thức của Google) cho dự án thực tế