面试题答案
一键面试SQLite零配置特性阐述
SQLite 的零配置特性指的是它不需要一个单独的服务器进程或操作的系统配置。它直接读写普通的磁盘文件,应用程序在使用 SQLite 时,只需链接到其库文件,就可以开始创建、访问和管理数据库,无需像其他数据库(如 MySQL、Oracle 等)那样进行复杂的服务器安装、配置及启动等操作。
在小型移动应用记录个人日常开支项目中利用此特性简化开发流程的示例
- 初始化数据库 在移动应用开发中(以 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
并定义数据表结构。
- 数据操作 进行日常开支记录插入操作时:
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 数据库文件上进行数据的增删改查操作,极大地简化了开发流程,尤其是在移动应用这种对资源和网络依赖有一定限制的场景下。