Android数据存储:SQLite、Room

news/2024/10/18 2:27:01/

在Android平台上,集成了一个嵌入式关系型数据库—SQLite,SQLite3支持 NULL、INTEGER、REAL(浮点数字)、TEXT(字符串文本)和BLOB(二进制对象)数据类型,虽然它支持的类型只有五种,但实际上sqlite3也接受varchar(n)、char(n)、decimal(p,s)等数据类型,只不过在运算或保存时会转成对应的五种数据类型。 SQLite最大的特点是你可以把各种类型的数据保存到任何字段中,但是主键只能是Integer类型的。Sqlite数据库一般要求主键是_id,当然也可以是id。android里面的数据库是由底层的sqilte.c的代码来动态生成的。

详细使用参考: 【Android入门到项目实战--4.5】—— SQLite数据库存储实现增删改查_android sqlite数据库增删改查-CSDN博客

Android Room 是 Android 官方提供的一个持久性库,用于在 Android 应用程序中管理数据库。它提供了一个对象关系映射(ORM)层,允许您在应用程序中使用对象来表示数据库表和数据行,并自动生成与之相关的SQL查询和操作。

Room使用

1.在build.gradle文件中添加依赖
def room_version = "2.6.1"implementation "androidx.room:room-runtime:$room_version"annotationProcessor "androidx.room:room-compiler:$room_version"

2.创建一个数据实体类:实体表示应用的数据库中的表。数据实体用于更新表中的行所存储的数据以及创建新行供插入。

使用 Room 实体定义数据  |  Android Developers (google.cn)

3.创建一个数据访问对象 (DAO):提供在数据库中查询、更新、插入和删除数据的方法。

使用 Room DAO 访问数据  |  Android Developers (google.cn)

4.创建一个数据库类:数据库类用于定义实体和数据访问对象的列表。它也是底层连接的主要访问点。

@Database(entities = {Student.class},version = 1,exportSchema = false)
public abstract class StudentDatabase extends RoomDatabase {public abstract StudentDao getStudentDao();private static StudentDatabase INSTANCE;public static synchronized StudentDatabase getInstance(Context context){if (INSTANCE == null){INSTANCE = Room.databaseBuilder(context.getApplicationContext(),StudentDatabase.class,"student_database").build();}return INSTANCE;}}
  • 该类必须带有@Database注解,entities指明包含的实体, version表明版本,将 version 设为 1。每当更改数据库表的架构时,都必须提升版本号。将 exportSchema 设为 false,这样就不会保留架构版本记录的备份。
  • 该类必须是一个抽象类,用于继承RoomDatabase。
  • 对于与数据库关联的每个 DAO 类,数据库类必须定义一个具有零参数的抽象方法,并返回 DAO 类的实例。
  • 使用Room的Room.databaseBuilder创建数据库。不过,仅当该数据库不存在时才应创建。否则,请返回现有数据库。

5.创建一个类实现数据库异步操作

public class DBEngine {private StudentDao studentDao;public DBEngine(Context context) {StudentDatabase studentDatabase = StudentDatabase.getInstance(context);studentDao = studentDatabase.getStudentDao();}public void insertStudents(Student... students){new InsertAsyncTask(studentDao).execute(students);}public  void deleteStudents(Student... students){new DeleteAsyncTask(studentDao).execute(students);}public void updateStudents(Student... students){new UpdateAsyncTask(studentDao).execute(students);}public  void deleteAllStudent(){new DeleteAllAsyncTask(studentDao).execute();}public  void queryStudents(){new QueryAllAsyncTask(studentDao).execute();}//插入static class InsertAsyncTask extends AsyncTask<Student,Void,Void>{private StudentDao dao;public InsertAsyncTask(StudentDao studentDao) {dao = studentDao;}@Overrideprotected Void doInBackground(Student... students) {dao.insertStudents(students);return null;}}//修改static class UpdateAsyncTask extends AsyncTask<Student,Void,Void>{private StudentDao dao;public UpdateAsyncTask(StudentDao studentDao) {dao = studentDao;}@Overrideprotected Void doInBackground(Student... students) {dao.updateStudents(students);return null;}}//删除static   class DeleteAsyncTask extends AsyncTask<Student,Void,Void>{private StudentDao dao;public DeleteAsyncTask(StudentDao studentDao) {dao = studentDao;}@Overrideprotected Void doInBackground(Student... students) {dao.deleteStudents(students);return null;}}//全部删除static class DeleteAllAsyncTask extends AsyncTask<Void,Void,Void>{private StudentDao dao;public DeleteAllAsyncTask(StudentDao studentDao){dao = studentDao;}@Overrideprotected Void doInBackground(Void... voids) {dao.deleteAllStudents();return null;}}//全部查询static class QueryAllAsyncTask extends AsyncTask<Void,Void,Void>{private StudentDao dao;public QueryAllAsyncTask(StudentDao studentDao){dao = studentDao;}@Overrideprotected Void doInBackground(Void... voids) {List<Student> allStudents = dao.getAllStudents();for (Student s : allStudents) {Log.e("search", "doInBackground:全部查询每一项"+ s.toString() );}return null;}}

6.MainActivity

public class MainActivity2 extends AppCompatActivity {private DBEngine dbEngine;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main2);dbEngine = new DBEngine(this);}public void insertAction(View view) {Student student = new Student("jerry",8);Student student1 = new Student("tom",9);Student student2 = new Student("jack",10);dbEngine.insertStudents(student,student1,student2);}public void deleteAction(View view) {Student student = new Student(null,0);student.setId(2);dbEngine.deleteStudents(student);}public void updateAction(View view) {Student student = new Student("lili",20);student.setId(3);dbEngine.updateStudents(student);}public void queryAction(View view) {dbEngine.queryStudents();}public void deleteAllAction(View view) {dbEngine.deleteAllStudent();}
}


http://www.ppmy.cn/news/1401957.html

相关文章

阿里云服务器初始化简记

文章目录 推荐版本CPU、内存、硬盘视活动而定&#xff0c;一般活动价99元一年注意带宽云服务器具体设置建议系统推荐CentOS 7.9本地系统推荐MacOSiTerm2本地系统推荐Win11Linux子系统推荐开发环境NginxPythonMySQL 机器和系统基本状况测试网速设置Vim显示中文其他系统状态监控和…

复制构造函数的使用

#include<iostream> using namespace std; class sample{ public:int v;sample(int n):v(n){}sample(const sample & c){v2*c.v;} }; int main(){sample a(5);sample ba;cout<<b.v;return 0; }

JSQLParserException异常

前言 SQL中加入了租户字段&#xff0c;报这个错&#xff0c;可以查出数据&#xff0c;但是不多&#xff1b;SQL检查无问题 解决 原因一 引入新的SQL解析器检查解析SQL&#xff0c;与mybatis多租户无关 参考 <!--jsqlparser版本太低也无法解析&#xff0c;如2.0--> &…

厦门攸信技术亮相新技术研讨会,展现物流自动化解决方案新高度!

今日&#xff0c;厦门攸信信息技术有限公司受邀参加了一场备受行业关注的电子制造高端盛会——一步步新技术研讨会&#xff0c;凭借卓越的智能制造与物流自动化技术在会议中大放异彩。作为一家引领行业发展的企业&#xff0c;厦门攸信技术不仅展示了其深厚的技术底蕴&#xff0…

XR虚拟直播间,引领创新风潮,打破直播局限!

随着互联网技术日新月异的发展&#xff0c;直播行业也迎来了蓬勃发展的春天。然而&#xff0c;大多数直播间在吸引观众眼球和延长用户观看时长方面&#xff0c;仍然面临着巨大的挑战。正是在这样的背景下&#xff0c;XR虚拟直播系统应运而生&#xff0c;以其多维度的直播场景、…

字符串加解密例题训练

描述 对输入的字符串进行加解密&#xff0c;并输出。 加密方法为&#xff1a; 当内容是英文字母时则用该英文字母的后一个字母替换&#xff0c;同时字母变换大小写,如字母a时则替换为B&#xff1b;字母Z时则替换为a&#xff1b; 当内容是数字时则把该数字加1&#xff0c;如…

使用INSERT INTO ... ON DUPLICATE KEY UPDATE批量插入更新导入excel数据的实践场景应用

INSERT INTO ... ON DUPLICATE KEY UPDATE 是 MySQL 中的一个非常有用的语法&#xff0c;它允许你在插入新记录时&#xff0c;如果记录的唯一键&#xff08;如主键或唯一索引&#xff09;已存在&#xff0c;则执行更新操作而不是插入。这可以帮助你避免在插入数据时产生的重复键…

基于Givens旋转完成QR分解进而求解实矩阵的逆矩阵

基于Givens旋转完成QR分解进而求解实矩阵的逆矩阵 目录 前言 一、Givens旋转简介 二、Givens旋转解释 三、Givens旋转进行QR分解 四、Givens旋转进行QR分解数值计算例子 五、求逆矩阵 六、MATLAB仿真 七、参考资料 总结 前言 在进行QR分解时&#xff0c;HouseHolder变换…