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

Cách lưu dữ liệu SQLite Android không dùng ContentValues


Trước khi vào ví dụ, cần hiểu SQLite trong Android: cơ sở dữ liệu SQL mã nguồn mở, lưu trữ dữ liệu trong tệp văn bản trên thiết bị. Android tích hợp sẵn SQLite, hỗ trợ đầy đủ tính năng quan hệ. Truy cập không cần kết nối JDBC, ODBC.

Ví dụ này minh họa cách lưu dữ liệu vào SQLite Android bằng cú pháp SQL trực tiếp (không dùng ContentValues).

Bước 1: Tạo dự án mới

Tạo dự án mới trong Android Studio: File → New Project, điền thông tin cần thiết.

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 có tên, lương (EditText). Nhấn Lưu để lưu vào SQLite.

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 readdInstanceState) {
        super.onCreate(readdInstanceState);
        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) {
                if (!name.getText().toString().isEmpty() && !salary.getText().toString().isEmpty()) {
                    if (helper.insert(name.getText().toString(), salary.getText().toString())) {
                        Toast.makeText(MainActivity.this, "Đã thêm", Toast.LENGTH_LONG).show();
                    } 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 = "salaryDatabase1";
    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 AUTOINCREMENT, name text, salary text, CHECK (salary >= 10000) )");
    }

    @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 s, String s1) {
        SQLiteDatabase db = this.getWritableDatabase();
        // Chèn dữ liệu bằng câu lệnh SQL INSERT trực tiếp thay vì ContentValues
        db.execSQL("INSERT INTO " + CONTACTS_TABLE_NAME + "(id, name, salary) VALUES (1, '" + s + "', '" + s1 + "')");
        /* Cách dùng ContentValues (đã comment):
        ContentValues contentValues = new ContentValues();
        contentValues.put("name", s);
        contentValues.put("salary", s1);
        db.insert(CONTACTS_TABLE_NAME, null, contentValues);
        */
        return true;
    }
}

Chạy ứng dụng

Kết nối thiết bị, chạy từ Android Studio. Màn hình hiển thị giao diện mặc định.

Cách lưu dữ liệu SQLite Android không dùng ContentValues

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

Cách lưu dữ liệu SQLite Android không dùng ContentValues

Kiểm tra kết quả trong Android Studio (Device File Explorer):

Cách lưu dữ liệu SQLite Android không dùng ContentValues

Lưu ý: Ví dụ này dùng ID cứng (1) trong câu INSERT, thực tế nên dùng AUTOINCREMENT và không chỉ định ID. Cách dùng ContentValues an toàn hơn chống SQL Injection.