Android里怎么连接数据库然后操作数据,简单示例和步骤分享
- 问答
- 2026-01-17 17:43:46
- 5
在Android应用里连接数据库并操作数据,最常用也是最推荐的方式是使用Android系统自带的SQLite数据库,并通过一个叫做Room的库来简化操作,下面我就用最直白的方式,一步步告诉你该怎么做。
第一步:准备工作 - 添加Room库
Room不是Android系统里直接能用的,需要像给应用安装插件一样,把它添加到项目中,这个过程是在项目的构建文件里完成的,根据Android官方文档(来源:Android开发者官网 - Room)的说明,你需要打开你项目中的build.gradle文件(注意是Module级别的那个,不是Project级别的)。
在那个文件里,找到dependencies这个部分,然后添加下面几行代码:
def room_version = "2.5.0"
implementation "androidx.room:room-runtime:$room_version"
annotationProcessor "androidx.room:room-compiler:$room_version"
添加之后,点击一下“Sync Now”同步一下,Android Studio就会自动帮你下载和配置好Room库,这一步就像是给你的应用工具箱里放入了操作数据库所需要的扳手和螺丝刀。
第二步:创建数据表 - 定义实体类
数据库里存数据,得像Excel一样,先有个表格,规定好每一列叫什么名字、放什么类型的数据,在Room里,这个表格是通过一个普通的Java类来定义的,这个类就叫“实体”。
我想做一个备忘录应用,要存每条备忘录的id、标题和内容,那我就创建一个叫Note的类。
import androidx.room.Entity;
import androidx.room.PrimaryKey;
@Entity(tableName = "notes_table")
public class Note {
@PrimaryKey(autoGenerate = true)
public int id;
public String title;
public String content;
}
我一句句解释一下:
@Entity(tableName = "notes_table"):告诉Room,这个类对应数据库里的一张表,表的名字叫notes_table。@PrimaryKey(autoGenerate = true):告诉Room,id这个字段是主键,并且让它自动增长,也就是说,我每插入一条新数据,id会自动变成1,2,3...,我不需要手动设置。public String title;和public String content;:这就是表格里的另外两列了。
你看,我并没有写任何创建表格的复杂命令,只是用一些简单的注解描述了一下,Room就会在背后帮我把创建表格的活儿干了。
第三步:操作数据 - 创建数据访问对象

表格有了,接下来就是要定义能对表格做什么操作,比如增加一条记录、删除一条记录、查询所有记录等,这个定义操作的地方,在Room里叫做“数据访问对象”,通常缩写为DAO。
我需要创建一个接口,名字叫NoteDao。
import androidx.room.Dao;
import androidx.room.Delete;
import androidx.room.Insert;
import androidx.room.Query;
import java.util.List;
@Dao
public interface NoteDao {
@Insert
void insert(Note note);
@Query("SELECT * FROM notes_table")
List<Note> getAllNotes();
@Delete
void delete(Note note);
}
这里又用到了几个注解:
@Dao:告诉Room,这个接口是数据访问对象。@Insert:表示这个方法是用来插入数据的,我只需要把一個Note对象传给它,它就知道怎么把数据插到notes_table表里。@Query("SELECT * FROM notes_table"):这是自定义查询,括号里的就是标准的SQL语句,意思是“从notes_table表里选取所有列的所有记录”,这个方法会返回一个包含所有备忘录的列表。@Delete:表示这个方法用来删除数据。
神奇的是,我只需要写出方法的定义(方法名、参数、返回值),具体怎么插入、怎么查询的代码我完全不用写,Room会根据我的注解在编译时自动生成这些代码。
第四步:连接数据库 - 创建数据库类
现在有了表格(实体类),有了操作说明书(DAO接口),我们需要一个总的数据库管理类把它们组合起来,这个类必须继承自Room的RoomDatabase。

我创建一个叫AppDatabase的抽象类。
import androidx.room.Database;
import androidx.room.Room;
import androidx.room.RoomDatabase;
import android.content.Context;
@Database(entities = {Note.class}, version = 1)
public abstract class AppDatabase extends RoomDatabase {
public abstract NoteDao noteDao();
private static AppDatabase INSTANCE;
public static AppDatabase getDatabase(final Context context) {
if (INSTANCE == null) {
synchronized (AppDatabase.class) {
if (INSTANCE == null) {
INSTANCE = Room.databaseBuilder(context.getApplicationContext(),
AppDatabase.class, "my_note_database")
.build();
}
}
}
return INSTANCE;
}
}
这段代码稍微复杂一点,但核心很简单:
@Database(entities = {Note.class}, version = 1):告诉Room,这个数据库包含了哪些表(这里只有Note类对应的表),以及数据库的版本号(现在先是1)。public abstract NoteDao noteDao();:这是一个抽象方法,目的是为了获取到我们之前写的那个NoteDao对象,有了它,我们就能进行增删改查操作了。- 下面那一大段
getDatabase方法,是一个标准的单例模式写法,目的是保证整个App中只有一个数据库实例,避免重复打开数据库造成资源浪费,它用Room.databaseBuilder来构建数据库实例,并给数据库文件起名叫my_note_database。
第五步:在Activity中实际使用
所有准备工作都做完了,现在可以在Activity里真正地存数据和取数据了,注意,数据库操作不能在主线程(UI线程)上执行,否则可能会导致应用卡顿甚至崩溃,这里我们先用一个简单的方法allowMainThreadQueries来允许在主线程操作(仅用于测试,正式项目必须使用后台线程)。
假设我在MainActivity里使用:
public class MainActivity extends AppCompatActivity {
private AppDatabase db;
private NoteDao noteDao;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// 获取数据库和DAO实例
db = AppDatabase.getDatabase(this);
noteDao = db.noteDao();
// 创建一条新备忘录
Note newNote = new Note();
newNote.title = "我的第一个备忘录";
newNote.content = "这是用Room存储的内容。";
// 将新备忘录插入数据库(这里为了演示,用了允许主线程的方法,实际开发不推荐)
// 正式开发应该用AsyncTask, RxJava或Room内置的协程支持。
new Thread(new Runnable() {
@Override
public void run() {
noteDao.insert(newNote);
// 插入后,查询一下所有备忘录
List<Note> allNotes = noteDao.getAllNotes();
// 在Logcat中打印出来看看
for (Note note : allNotes) {
Log.d("MainActivity", "ID: " + note.id + ", Title: " + note.title);
}
}
}).start();
}
}
这段代码做了几件事:
- 在
onCreate里,通过AppDatabase.getDatabase(this)拿到了数据库实例。 - 通过
db.noteDao()拿到了可以操作备忘录表的NoteDao对象。 - new了一个
Note对象,并设置了标题和内容。 - 为了避免在主线程操作数据库,我启动了一个新线程,在线程里先执行插入
noteDao.insert(newNote),然后立刻查询所有的备忘录noteDao.getAllNotes(),并通过Log打印出来。
你运行应用后,可以在Android Studio的Logcat窗口里看到输出的备忘录信息,这就证明数据已经成功存入数据库并被读取出来了。
整个流程就是:加库 -> 建表(实体类) -> 定义操作(DAO接口) -> 组装数据库(Database类) -> 在Activity中获取DAO并在线程中使用,虽然看起来步骤不少,但每一步要做的事情都非常清晰和固定,Room帮我们处理了最复杂的数据库底层操作,让开发者可以更专注于业务逻辑。
本文由酒紫萱于2026-01-17发表在笙亿网络策划,如有疑问,请联系我们。
本文链接:http://waw.haoid.cn/wenda/82545.html
