Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> Android

Cách lưu dữ liệu bằng SQLite trong Android

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

Cách lưu dữ liệu bằng SQLite trong Android

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

Cách lưu dữ liệu bằng SQLite trong Android

Để 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ách lưu dữ liệu bằng SQLite trong Android

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 AUTOINCREMENT cho cột id
  • Định nghĩa tên cột/table dưới dạng static final String hằ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ế