MST

星途 面试题库

面试题:SQLite零配置特性在实际项目中的应用

请阐述SQLite零配置特性是什么,并举例说明在实际项目开发中,如何利用这一特性来简化开发流程,假设你正在开发一个小型移动应用程序用于记录个人日常开支。
44.4万 热度难度
数据库SQLite

知识考点

AI 面试

面试题答案

一键面试

SQLite零配置特性阐述

SQLite 的零配置特性指的是它不需要一个单独的服务器进程或操作的系统配置。它直接读写普通的磁盘文件,应用程序在使用 SQLite 时,只需链接到其库文件,就可以开始创建、访问和管理数据库,无需像其他数据库(如 MySQL、Oracle 等)那样进行复杂的服务器安装、配置及启动等操作。

在小型移动应用记录个人日常开支项目中利用此特性简化开发流程的示例

  1. 初始化数据库 在移动应用开发中(以 Android 为例,使用 Java 语言),可以在应用启动时直接初始化 SQLite 数据库。
import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;

public class ExpenseDBHelper extends SQLiteOpenHelper {
    private static final String DATABASE_NAME = "expense.db";
    private static final int DATABASE_VERSION = 1;

    public ExpenseDBHelper(Context context) {
        super(context, DATABASE_NAME, null, DATABASE_VERSION);
    }

    @Override
    public void onCreate(SQLiteDatabase db) {
        String createTable = "CREATE TABLE expenses (" +
                "id INTEGER PRIMARY KEY AUTOINCREMENT," +
                "date TEXT," +
                "amount REAL," +
                "category TEXT," +
                "description TEXT)";
        db.execSQL(createTable);
    }

    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        // 简单示例,这里可以实现更复杂的版本升级逻辑
        db.execSQL("DROP TABLE IF EXISTS expenses");
        onCreate(db);
    }
}

这里无需额外配置服务器,直接在应用内创建数据库文件 expense.db 并定义数据表结构。

  1. 数据操作 进行日常开支记录插入操作时:
public void addExpense(Expense expense) {
    SQLiteDatabase db = this.getWritableDatabase();
    ContentValues values = new ContentValues();
    values.put("date", expense.getDate());
    values.put("amount", expense.getAmount());
    values.put("category", expense.getCategory());
    values.put("description", expense.getDescription());

    db.insert("expenses", null, values);
    db.close();
}

读取开支记录时:

public List<Expense> getAllExpenses() {
    List<Expense> expenseList = new ArrayList<>();
    String selectQuery = "SELECT  * FROM expenses";

    SQLiteDatabase db = this.getReadableDatabase();
    Cursor cursor = db.rawQuery(selectQuery, null);

    if (cursor.moveToFirst()) {
        do {
            Expense expense = new Expense();
            expense.setId(cursor.getInt(0));
            expense.setDate(cursor.getString(1));
            expense.setAmount(cursor.getDouble(2));
            expense.setCategory(cursor.getString(3));
            expense.setDescription(cursor.getString(4));

            expenseList.add(expense);
        } while (cursor.moveToNext());
    }
    cursor.close();
    db.close();
    return expenseList;
}

整个过程中,不需要与外部服务器交互,直接在本地 SQLite 数据库文件上进行数据的增删改查操作,极大地简化了开发流程,尤其是在移动应用这种对资源和网络依赖有一定限制的场景下。