安卓数据库怎么用?一步步教你搞定数据管理,别再头疼了
- 问答
- 2026-01-04 00:32:19
- 22
“安卓数据库怎么用?一步步教你搞定数据管理,别再头疼了”
你是不是也遇到过这样的问题?开发一个简单的安卓应用,比如记账本、购物清单或者个人通讯录,需要把用户输入的数据保存下来,即使关闭应用再打开,数据也不会丢失,这时候,你就需要用到数据库了,别一听到“数据库”就觉得是那种很复杂的东西,对于安卓开发来说,最常用、也是最入门级的工具就是 SQLite,它就像一个内置在你手机应用里的迷你Excel表格,帮你井井有条地管理数据。
我们就用最直白的话,一步步教你如何搞定它,我们的目标是:创建一个非常简单的“备忘录”应用,可以添加和显示备忘信息。
第一步:认识核心帮手 - SQLiteOpenHelper
想象一下,你要用一个保险箱存东西,首先你得有个保险箱,并且知道开锁密码,在安卓里,SQLiteOpenHelper 就是这个帮你创建和管理保险箱(数据库)的忠实管家,你不需要自己从零开始造保险箱,只需要告诉这个管家一些基本信息就行。
我们要做的是创建一个类,来继承 SQLiteOpenHelper,在这个类里,我们需要完成几件关键事情:
- 定义数据库结构:就像设计表格的表头,我们的备忘录很简单,只需要记录每条备忘的ID(主键,唯一标识)和内容。
- 创建数据库和表:告诉管家如何第一次搭建这个保险箱和里面的抽屉(表)。
- 处理数据库升级:万一以后我们想给备忘录加个“创建时间”的字段,就需要告诉管家如何改造保险箱。
具体代码看起来是这样的(别怕,我们逐行解释):
public class MyDatabaseHelper extends SQLiteOpenHelper {
// 数据库信息
private static final String DATABASE_NAME = "MyNotes.db"; // 数据库名字
private static final int DATABASE_VERSION = 1; // 版本号,从1开始
// 表名和列名
public static final String TABLE_NOTES = "notes";
public static final String COLUMN_ID = "_id";
public static final String COLUMN_CONTENT = "content";
// 构造方法,必须要有
public MyDatabaseHelper(Context context) {
super(context, DATABASE_NAME, null, DATABASE_VERSION);
}
// 第一次创建数据库时会调用,在这里执行建表操作
@Override
public void onCreate(SQLiteDatabase db) {
// 组装一个创建表的SQL语句
String CREATE_TABLE = "CREATE TABLE " + TABLE_NOTES + "("
+ COLUMN_ID + " INTEGER PRIMARY KEY AUTOINCREMENT, "
+ COLUMN_CONTENT + " TEXT" + ")";
// 执行SQL语句
db.execSQL(CREATE_TABLE);
}
// 当数据库需要升级(版本号增加)时调用,比如要修改表结构
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
// 简单粗暴的做法:删除旧表,创建新表(注意这会丢失所有旧数据!)
db.execSQL("DROP TABLE IF EXISTS " + TABLE_NOTES);
onCreate(db);
}
}
解释一下关键点:
DATABASE_NAME:你的数据库文件叫什么名字,MyNotes.db。TABLE_NOTES:表的名字,notes。COLUMN_ID和COLUMN_CONTENT:列的名字。_id是主键,AUTOINCREMENT表示它会自动增长,你不用管;content是文本类型(TEXT),用来存备忘录内容。onCreate方法:只在第一次创建数据库时运行一次,就像初始化。onUpgrade:当你的应用更新,数据库结构也需要变化时(比如增加了新字段),你需要提高DATABASE_VERSION的值,然后在这里写升级逻辑。
第二步:学会“增删改查”四门功课
数据库建好了,接下来就是最重要的操作:存数据(增)、删数据(删)、改数据(改)、取数据(查),这四大操作合称 CRUD。
增 - 添加一条新备忘
当用户在输入框里写好内容,点击“保存”按钮时,我们就需要把数据插入到数据库里。
// 获取一个可写的数据库对象 MyDatabaseHelper dbHelper = new MyDatabaseHelper(this); SQLiteDatabase db = dbHelper.getWritableDatabase(); // 创建一个ContentValues对象,它就像是一个包裹,里面装着你要存的数据 ContentValues values = new ContentValues(); values.put(MyDatabaseHelper.COLUMN_CONTENT, "这是我的第一条备忘录!"); // 执行插入操作,返回新行的ID,如果失败返回-1 long newRowId = db.insert(MyDatabaseHelper.TABLE_NOTES, null, values); // 操作完成后,记得关闭数据库连接,这是个好习惯 db.close();
查 - 读取并显示所有备忘
我们要把存进去的数据读出来,显示在列表里(比如用 ListView 或 RecyclerView)。
// 获取一个可读的数据库对象
MyDatabaseHelper dbHelper = new MyDatabaseHelper(this);
SQLiteDatabase db = dbHelper.getReadableDatabase();
// 定义你要查询哪些列
String[] projection = {
MyDatabaseHelper.COLUMN_ID,
MyDatabaseHelper.COLUMN_CONTENT
};
// 执行查询,得到一个Cursor(游标)对象,你可以把它想象成指向结果集第一行之前的指针
Cursor cursor = db.query(
MyDatabaseHelper.TABLE_NOTES, // 表名
projection, // 要返回的列
null, // WHERE条件(这里不过滤,查全部)
null, // WHERE条件的参数
null, // GROUP BY分组
null, // HAVING过滤分组
null // ORDER BY排序
);
// 遍历Cursor,取出数据
List<String> notesList = new ArrayList<>();
while (cursor.moveToNext()) {
// 通过列名获取索引,再通过索引获取值
long itemId = cursor.getLong(cursor.getColumnIndexOrThrow(MyDatabaseHelper.COLUMN_ID));
String content = cursor.getString(cursor.getColumnIndexOrThrow(MyDatabaseHelper.COLUMN_CONTENT));
notesList.add("ID:" + itemId + ", 内容:" + content);
}
// 非常重要!用完Cursor一定要关闭
cursor.close();
db.close();
// 现在notesList里就有了所有备忘数据,你可以把它设置给ListView的适配器了
改 - 更新某条备忘
比如用户想修改某条已经存在的备忘。
MyDatabaseHelper dbHelper = new MyDatabaseHelper(this);
SQLiteDatabase db = dbHelper.getWritableDatabase();
ContentValues values = new ContentValues();
values.put(MyDatabaseHelper.COLUMN_CONTENT, "这是我修改后的备忘录内容!");
// 指定要更新哪一行,这里更新ID为1的那一行
String selection = MyDatabaseHelper.COLUMN_ID + " = ?";
String[] selectionArgs = { "1" };
int count = db.update(
MyDatabaseHelper.TABLE_NOTES,
values,
selection,
selectionArgs
);
db.close();
删 - 删除一条备忘
MyDatabaseHelper dbHelper = new MyDatabaseHelper(this);
SQLiteDatabase db = dbHelper.getWritableDatabase();
// 指定要删除哪一行,这里删除ID为1的那一行
String selection = MyDatabaseHelper.COLUMN_ID + " = ?";
String[] selectionArgs = { "1" };
int deletedRows = db.delete(MyDatabaseHelper.TABLE_NOTES, selection, selectionArgs);
db.close();
总结与提醒
看,是不是没有想象中那么难?整个过程就像是在管理一个结构清晰的表格,我们来回顾一下关键步骤:
- 请个管家:创建
SQLiteOpenHelper子类,定义好数据库和表的结构。 - 开门:在需要操作数据库的地方,通过
getWritableDatabase()或getReadableDatabase()获取数据库对象。 - 干活:使用
insert,query,update,delete方法进行增删改查。 - 关门:操作完成后,记得调用
close()方法关闭数据库连接,释放资源。
最后给你几个小贴士,避免踩坑:
- 别在主线程操作数据库:复杂的数据库查询可能会耗时,导致界面卡顿(ANR),一定要在子线程(比如用
AsyncTask、Thread或RxJava)中执行数据库操作。 - Cursor必须关闭:查询得到的
Cursor对象是个资源消耗大户,用完不关很容易导致内存泄漏。 onUpgrade要小心:上面的例子为了简单直接删表重建,这在真实项目中会使用户数据丢失,正确的做法是使用ALTER TABLE语句来增量升级。
先从这个小例子开始动手试试吧!当你成功运行起一个可以保存数据的备忘录时,你就会发现,安卓数据库管理这座小山头,已经被你轻松拿下了。

本文由革姣丽于2026-01-04发表在笙亿网络策划,如有疑问,请联系我们。
本文链接:https://www.haoid.cn/wenda/74009.html