在 Android 应用开发领域,数据存储与管理至关重要,SQLite 数据库凭借其轻量级、零配置、嵌入性强等优势,成为众多开发者的首选。今天,咱们就深入剖析一个基于 SQLite 的基础项目,手把手教你实现数据库单表的增删改查(CRUD)操作,为你的 Android 开发技能库再添重磅 “武器”。
一、项目架构与核心思路
本项目旨在搭建一个完备的 Android SQLite 数据库操作框架,实现对一张数据表的基础管理功能。核心由两大关键类构成:DatabaseHelper
负责数据库的创建、升级与降级维护,扮演幕后 “基建工程师” 的角色;DatabaseManager
则专注于数据的增删改查业务逻辑,如同高效的 “数据管家”,直接对接上层业务需求,两者协同,确保数据库稳定、高效运行。
二、创建 SQLite 数据库:DatabaseHelper
详解
代码如下:
package com.example.yourpackage;
import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
public class DatabaseHelper extends SQLiteOpenHelper {
private static final String DATABASE_NAME = "mydatabase.db";
private static final int DATABASE_VERSION = 1;
public DatabaseHelper(Context context) {
super(context, DATABASE_NAME, null, DATABASE_VERSION);
}
@Override
public void onCreate(SQLiteDatabase db) {
String CREATE_TABLE = "CREATE TABLE " + MyContract.TABLE_NAME + "("
+ MyContract._ID + " INTEGER PRIMARY KEY AUTOINCREMENT,"
+ MyContract.COLUMN_NAME_TITLE + " TEXT)";
db.execSQL(CREATE_TABLE);
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
// Drop the old table if existed
db.execSQL("DROP TABLE IF EXISTS " + MyContract.TABLE_NAME);
// Create a new one
onCreate(db);
}
@Override
public void onDowngrade(SQLiteDatabase db, int oldVersion, int newVersion) {
onUpgrade(db, oldVersion, newVersion);
}
}
DatabaseHelper
继承自 SQLiteOpenHelper
,这是 Android 提供的数据库操作基类。构造函数接收 Context
、数据库名称 DATABASE_NAME
和版本号 DATABASE_VERSION
,初始化数据库辅助对象。
onCreate
方法在数据库首次创建时被调用,是建表的 “黄金时机”。此处通过拼接 SQL 语句 CREATE TABLE
,定义了包含自增主键 _ID
和文本类型字段 COLUMN_NAME_TITLE
的数据表,再用 db.execSQL
执行建表语句,奠定数据存储基础。
onUpgrade
方法用于数据库升级场景。当数据库版本号递增,系统触发此方法,先删除旧表,再调用 onCreate
重建,确保数据结构适配新需求;onDowngrade
同理,简单复用 onUpgrade
逻辑,处理版本降级情况。
需注意,此处可引入 MyContract
类定义表名、字段名常量,提升代码可维护性:
代码如下:
package com.example.yourpackage;
public class MyContract {
public static final String TABLE_NAME = "my_table";
public static final String _ID = "id";
public static final String COLUMN_NAME_TITLE = "title";
}
三、增删改查(CRUD)操作:DatabaseManager
大显身手
代码如下:
package com.example.yourpackage;
import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
public class DatabaseManager {
private DatabaseHelper dbHelper;
public DatabaseManager(Context context) {
dbHelper = new DatabaseHelper(context);
}
public void addEntry(String title) {
SQLiteDatabase db = dbHelper.getWritableDatabase();
ContentValues values = new ContentValues();
values.put(MyContract.COLUMN_NAME_TITLE, title);
db.insert(MyContract.TABLE_NAME, null, values);
db.close();
}
public Cursor getAllEntries() {
SQLiteDatabase db = dbHelper.getReadableDatabase();
return db.rawQuery("SELECT * FROM " + MyContract.TABLE_NAME, null);
}
public void updateEntry(long id, String title) {
SQLiteDatabase db = dbHelper.getWritableDatabase();
ContentValues values = new ContentValues();
values.put(MyContract.COLUMN_NAME_TITLE, title);
db.update(MyContract.TABLE_NAME, values, MyContract._ID + " =?", new String[]{String.valueOf(id)});
db.close();
}
public void deleteEntry(long id) {
SQLiteDatabase db = dbHelper.getWritableDatabase();
db.delete(MyContract.TABLE_NAME, MyContract._ID + " =?", new String[]{String.valueOf(id)});
db.close();
}
}
DatabaseManager
类封装了实际的 CRUD 操作。构造函数依赖 DatabaseHelper
,获取数据库操作入口。
addEntry
方法实现数据插入,先获取可写数据库实例 getWritableDatabase
,将待插入数据封装进 ContentValues
,调用 db.insert
把数据写入表中,最后别忘 db.close()
释放资源。
getAllEntries
方法用于查询全部数据,通过 getReadableDatabase
获取只读数据库实例,执行 rawQuery
查询语句,返回 Cursor
,上层代码可遍历 Cursor
获取具体数据记录。
updateEntry
针对数据修改,同样获取可写数据库,填充更新后数据到 ContentValues
,用 db.update
结合 WHERE
条件(主键匹配)精准更新指定记录。
deleteEntry
负责数据删除,借助 db.delete
搭配主键条件,快速移除目标数据,收尾时关闭数据库连接。
四、项目拓展与优化思路
当前项目搭建了基础框架,进阶拓展大有可为。功能层面,可引入事务机制,保障批量操作原子性,如批量插入多条数据时,若中途出错能整体回滚,确保数据完整性:
代码如下:
public void addEntries(List<String> titles) {
SQLiteDatabase db = dbHelper.getWritableDatabase();
db.beginTransaction();
try {
for (String title : titles) {
ContentValues values = new ContentValues();
values.put(MyContract.COLUMN_NAME_TITLE, title);
db.insert(MyContract.TABLE_NAME, null, values);
}
db.setTransactionSuccessful();
} catch (Exception e) {
e.printStackTrace();
} finally {
db.endTransaction();
db.close();
}
}
界面设计上,搭配 RecyclerView 或 ListView,可视化展示数据库数据;添加搜索、筛选功能,方便用户快速定位目标记录,全方位提升用户体验。
亲手打造 SQLite 数据库操作模块,为 Android 应用赋予稳定、高效的数据管理能力。快将这份代码付诸实践,要是开发途中碰上难题,随时交流探讨,一同攻克技术难关!