irpas技术客

Android开发 Room数据库框架_G.O.Y_android room数据库

网络投稿 4597

Room框架 Room数据库是基于SQLite数据库的一种框架,由谷歌推出, 主要有三个部分组成:

Entity(一个Entity对应数据库中的一张表。Entity类是Sqlite表结构对Java类的映射,在Java中可以看作一个Model类。)Dao(数据访问对象(Data Access Objects),我们通过它来访问数据。)DataBase( 创建数据库实例)

在使用之前要添加它的支持包:

//要想使用room需要导入room的支持 def room_version = "2.2.0-alpha01" implementation "androidx.room:room-runtime:$room_version" annotationProcessor "androidx.room:room-compiler:$room_version" //room的注解解释器

本次有以下文件构成:

Mainactivity.java(activity构造文件)Table.java(Enity)Table_dao.java(Dao)TableDataBase.java(DataBase)DBEngine.java(方便用户调用Dao)activity_main.xml(布局文件)

Mainactivity.java

package com.example.sqlite; import androidx.appcompat.app.AppCompatActivity; import android.os.Bundle; import android.view.View; import com.example.sqlite.room.DBEngine; import com.example.sqlite.room.Table; //room的学习 public class MainActivity2 extends AppCompatActivity { private DBEngine dbEngine; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main2); //获得db对象 dbEngine = new DBEngine(this); } /** * 插入三个信息 * @param view */ public void insert(View view) { Table table_0 = new Table("语文","张三","109"); Table table_1 = new Table("英语","李四","234"); Table table_2 = new Table("数学","王五","123"); dbEngine.inserTable(table_0,table_1,table_2); } /** * 修改 下标为2 的信息 * @param view */ public void update(View view) { Table table_0 = new Table("军事",null,"124"); table_0.setId(2); dbEngine.updateTable(table_0); } /** * 删除主键为1 的信息 * @param view */ public void delete(View view) { Table table = new Table(null,null,null); table.setId(1); dbEngine.deleteTable(table); } /** * 搜索并显示所有信息 * @param view */ public void queryable(View view) { dbEngine.queryAllTable(); } /** * 删除数据库所有信息 * @param view */ public void delete_all(View view) { dbEngine.deleteallTable(); } /** * 根据特定条件显示信息 * @param view */ public void query(View view) { Table table = new Table(null,null,null); //设置主键为2 table.setId(2); dbEngine.queryTable(table); } }

Table.java——实际上就是一张表(Entiy)

package com.example.sqlite.room; import androidx.room.Entity; import androidx.room.PrimaryKey; /** * 想要创建一个表 * 主键唯一 自动增长(auto) * */ @Entity public class Table { //设置主键,自动增长 @PrimaryKey(autoGenerate = true) private int id; private String course_name; private String teacher_name; private String course_adress; //构造方法 public Table(String course_name, String teacher_name, String course_adress) { this.course_name = course_name; this.teacher_name = teacher_name; this.course_adress = course_adress; } public String getCourse_name() { return course_name; } public void setCourse_name(String course_name) { this.course_name = course_name; } public String getTeacher_name() { return teacher_name; } public int getId() { return id; } public void setId(int id) { this.id = id; } public void setTeacher_name(String teacher_name) { this.teacher_name = teacher_name; } public String getCourse_adress() { return course_adress; } public void setCourse_adress(String course_adress) { this.course_adress = course_adress; } @Override public String toString() { return "Table{" + "id=" + id + ", course_name='" + course_name + '\'' + ", teacher_name='" + teacher_name + '\'' + ", course_adress='" + course_adress + '\'' + '}'; } }

Table_dao.java(接口)——里面含有操作数据库的方法(sql语句)

package com.example.sqlite.room; import androidx.room.Dao; import androidx.room.Delete; import androidx.room.Insert; import androidx.room.Query; import androidx.room.RawQuery; import androidx.room.Update; import java.util.List; //留给用户使用 @Dao public interface Table_dao { //增加 @Insert void insertTable(Table... tables); //改写 @Update void updateTable(Table... tables); //删除 单个--根据条件 @Delete void deleteTable(Table... tables); //删除所有信息 @Query("DELETE FROM `Table`") void deleteallTable(); //查询 单个--根据条件 //query后面跟的是SQL语句,里面可以设有变量方便编程 @Query("SELECT * FROM `Table` WHERE id = :id") Table getTable(int id); //查询所有 @Query("SELECT * FROM `Table` ORDER BY ID DESC") List<Table> getAllTable(); }

TableDataBase.java——将数据库关联到之前设定的表

package com.example.sqlite.room; import android.content.Context; import androidx.annotation.NonNull; import androidx.room.Database; import androidx.room.DatabaseConfiguration; import androidx.room.InvalidationTracker; import androidx.room.Room; import androidx.room.RoomDatabase; import androidx.sqlite.db.SupportSQLiteOpenHelper; //将数据库 关联 之前的表 数据库信息 @Database(entities = {Table.class},version = 1,exportSchema = false) public abstract class TableDatebase extends RoomDatabase { //用户只需要操作dao,我们必须暴露dao public abstract Table_dao getTable_dao(); //单例模式 返回DB private static TableDatebase INSTANCE; public static synchronized TableDatebase getInstance(Context context){ if (INSTANCE == null){ INSTANCE = Room.databaseBuilder(context.getApplicationContext(),TableDatebase.class,"TABLE_DATABASE") .build(); } return INSTANCE; } }

DBEngine.java

package com.example.sqlite.room; import android.content.Context; import android.os.AsyncTask; import android.util.Log; import java.util.List; public class DBEngine { private Table_dao table_dao; public DBEngine(Context context){ TableDatebase tableDatebase = TableDatebase.getInstance(context); table_dao = tableDatebase.getTable_dao(); } //增删改查 //增 insert public void inserTable(Table... tables){ new InsertAsyncTask(table_dao).execute(tables); } //修改 update public void updateTable(Table... tables){ new UpdateAsyncTask(table_dao).execute(tables); } //删除 delete public void deleteTable(Table... tables){ new DeleteAsyncTask(table_dao).execute(tables); } //删除 全部删除 deleteAll public void deleteallTable(){ new DeleteAllTable(table_dao).execute(); } //查询全部 public void queryAllTable(){ new QueryAllTable(table_dao).execute(); } //查询 条件 public void queryTable(Table... tables){ new QueryTable(table_dao).execute(tables); } //如果我们想完数据库 默认异步操作 ================== 异步操作 //AsyncTask的异步线程的一个抽象类 具体理解可以看:https://·/p/ee1342fcf5e7 public class InsertAsyncTask extends AsyncTask<Table,Void,Void>{ private Table_dao dao; public InsertAsyncTask(Table_dao table_dao){ dao = table_dao; } @Override protected Void doInBackground(Table... tables) { dao.insertTable(tables); return null; } } //修改 update public class UpdateAsyncTask extends AsyncTask<Table,Void,Void>{ private Table_dao dao; public UpdateAsyncTask(Table_dao table_dao){ dao = table_dao; } @Override protected Void doInBackground(Table... tables) { dao.updateTable(tables); return null; } } //删除根据条件 public class DeleteAsyncTask extends AsyncTask<Table,Void,Void>{ private Table_dao dao; public DeleteAsyncTask(Table_dao table_dao){ dao = table_dao; } //既然传入了table说明是条件删除 @Override protected Void doInBackground(Table... tables) { dao.deleteTable(tables); return null; } } //全部删除 public class DeleteAllTable extends AsyncTask<Void,Void,Void>{ private Table_dao dao; public DeleteAllTable(Table_dao table_dao){ dao = table_dao; } //全部删除 @Override protected Void doInBackground(Void... voids) { dao.deleteallTable(); return null; } } //全部查询 public static class QueryAllTable extends AsyncTask<Void,Void,Void>{ private Table_dao dao; public QueryAllTable(Table_dao table_dao){ dao = table_dao; } //全部查询 @Override protected Void doInBackground(Void... voids) { List<Table> allTable = dao.getAllTable(); //遍历所有结果 for (Table table : allTable){ Log.e("leo", "doInBackground:全部查询 每一项 查询 " +table.toString()); } return null; } } //条件查询 public static class QueryTable extends AsyncTask<Table,Void,Void>{ private Table_dao dao; public QueryTable(Table_dao table_dao){ dao = table_dao; } //条件查询 @Override protected Void doInBackground(Table... tables) { try { //可以通过下面这种方式获得主键,从而查询到相应的信息 Table table = dao.getTable(tables[0].getId()); //显示结果 Log.e("leo", "doInBackground:全部查询 每一项 查询 " +table.toString()); } catch (Exception e) { e.printStackTrace(); } return null; } } }

main_activity.xml

<?xml version="1.0" encoding="utf-8"?> <LinearLayout android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" xmlns:android="http://schemas.android.com/apk/res/android"> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="插入" android:onClick="insert"/> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="修改" android:onClick="update"/> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="删除" android:onClick="delete"/> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="全部删除" android:onClick="delete_all"/> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="全部查询" android:onClick="queryable"/> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="条件查询" android:onClick="query"/> </LinearLayout>


1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,会注明原创字样,如未注明都非原创,如有侵权请联系删除!;3.作者投稿可能会经我们编辑修改或补充;4.本站不提供任何储存功能只提供收集或者投稿人的网盘链接。

标签: #Android #room数据库 #DAO数据访问对象data #Access #database