文章目录

  • 1 添加依赖
  • 2 表的结构信息
  • 3 数据访问对象接口
  • 4 定义数据库
  • 5 使用
  • 6 查看结果
  • 7 生成的代码

https://developer.android.google.cn/topic/libraries/architecture/room

https://developer.android.google.cn/training/data-storage/room/index.html

https://developer.android.google.cn/jetpack/androidx/releases/room#declaring_dependencies

1 添加依赖

    def room_version = "2.2.0"    implementation "androidx.room:room-runtime:$room_version"    annotationProcessor "androidx.room:room-compiler:$room_version" // For Kotlin use kapt instead of annotationProcessor    // optional - Kotlin Extensions and Coroutines support for Room    implementation "androidx.room:room-ktx:$room_version"    // optional - RxJava support for Room    implementation "androidx.room:room-rxjava2:$room_version"    // optional - Guava support for Room, including Optional and ListenableFuture    implementation "androidx.room:room-guava:$room_version"    // Test helpers    testImplementation "androidx.room:room-testing:$room_version"

2 表的结构信息

/** * 这就相当于表的结构信息 */@Entitypublic class Student {    //设置主键,自增长    @PrimaryKey(autoGenerate = true)    private int uid;    @ColumnInfo(name = "name")    private String name;    @ColumnInfo(name = "pwd")    private String password;    @ColumnInfo(name = "addressId")    private int addressId;        public Student(String name, String password, int addressId) {        this.name = name;        this.password = password;        this.addressId = addressId;    }    public int getUid() {        return uid;    }    public void setUid(int uid) {        this.uid = uid;    }    public String getName() {        return name;    }    public void setName(String name) {        this.name = name;    }    public String getPassword() {        return password;    }    public void setPassword(String password) {        this.password = password;    }    public int getAddressId() {        return addressId;    }    public void setAddressId(int addressId) {        this.addressId = addressId;    }    @Override    public String toString() {        return "Student{" +                "uid=" + uid +                ", name='" + name + '\'' +                ", password='" + password + '\'' +                ", addressId=" + addressId +                '}';    }}

3 数据访问对象接口

/** * 这就是数据访问对象 * 用于操作数据的API */@Daopublic interface StudentDao {    @Insert    void insert(Student... students);    @Delete    void delete(Student student);    @Update    void update(Student student);    @Query("select * from Student")    List<Student> getAll();    }

4 定义数据库

/** * 定义数据库 */@Database(entities = {Student.class}, version = 1)public abstract class AppDatabase extends RoomDatabase {    public abstract StudentDao userDao();}

5 使用

public class MainActivity extends AppCompatActivity {    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        MyThread t = new MyThread();        t.start();    }    public class MyThread extends Thread {        @Override        public void run() {            super.run();            //在这里进行数据库的操作            AppDatabase HongxDB = Room.databaseBuilder(getApplicationContext()                    , AppDatabase.class                    , "HongxDB")                    .build();            StudentDao dao = HongxDB.userDao();            dao.insert(new Student("stu1", "123", 1));            dao.insert(new Student("stu2", "123", 2));            dao.insert(new Student("stu3", "123", 1));            dao.insert(new Student("stu4", "123", 2));            List<Student> list = dao.getAll();            Log.i("hongxue", list.toString());        }    }}

6 查看结果


7 生成的代码

import androidx.room.DatabaseConfiguration;import androidx.room.InvalidationTracker;import androidx.room.RoomOpenHelper;import androidx.room.RoomOpenHelper.Delegate;import androidx.room.RoomOpenHelper.ValidationResult;import androidx.room.util.DBUtil;import androidx.room.util.TableInfo;import androidx.room.util.TableInfo.Column;import androidx.room.util.TableInfo.ForeignKey;import androidx.room.util.TableInfo.Index;import androidx.sqlite.db.SupportSQLiteDatabase;import androidx.sqlite.db.SupportSQLiteOpenHelper;import androidx.sqlite.db.SupportSQLiteOpenHelper.Callback;import androidx.sqlite.db.SupportSQLiteOpenHelper.Configuration;import java.lang.Override;import java.lang.String;import java.lang.SuppressWarnings;import java.util.HashMap;import java.util.HashSet;import java.util.Set;@SuppressWarnings({"unchecked", "deprecation"})public final class AppDatabase_Impl extends AppDatabase {  private volatile StudentDao _studentDao;  @Override  protected SupportSQLiteOpenHelper createOpenHelper(DatabaseConfiguration configuration) {    final SupportSQLiteOpenHelper.Callback _openCallback = new RoomOpenHelper(configuration, new RoomOpenHelper.Delegate(1) {      @Override      public void createAllTables(SupportSQLiteDatabase _db) {        _db.execSQL("CREATE TABLE IF NOT EXISTS `Student` (`uid` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, `name` TEXT, `pwd` TEXT, `addressId` INTEGER NOT NULL)");        _db.execSQL("CREATE TABLE IF NOT EXISTS room_master_table (id INTEGER PRIMARY KEY,identity_hash TEXT)");        _db.execSQL("INSERT OR REPLACE INTO room_master_table (id,identity_hash) VALUES(42, '59d4098a3eac39a789ec7c792754cd68')");      }      @Override      public void dropAllTables(SupportSQLiteDatabase _db) {        _db.execSQL("DROP TABLE IF EXISTS `Student`");        if (mCallbacks != null) {          for (int _i = 0, _size = mCallbacks.size(); _i < _size; _i++) {            mCallbacks.get(_i).onDestructiveMigration(_db);          }        }      }      @Override      protected void onCreate(SupportSQLiteDatabase _db) {        if (mCallbacks != null) {          for (int _i = 0, _size = mCallbacks.size(); _i < _size; _i++) {            mCallbacks.get(_i).onCreate(_db);          }        }      }      @Override      public void onOpen(SupportSQLiteDatabase _db) {        mDatabase = _db;        internalInitInvalidationTracker(_db);        if (mCallbacks != null) {          for (int _i = 0, _size = mCallbacks.size(); _i < _size; _i++) {            mCallbacks.get(_i).onOpen(_db);          }        }      }      @Override      public void onPreMigrate(SupportSQLiteDatabase _db) {        DBUtil.dropFtsSyncTriggers(_db);      }      @Override      public void onPostMigrate(SupportSQLiteDatabase _db) {      }      @Override      protected RoomOpenHelper.ValidationResult onValidateSchema(SupportSQLiteDatabase _db) {        final HashMap<String, TableInfo.Column> _columnsStudent = new HashMap<String, TableInfo.Column>(4);        _columnsStudent.put("uid", new TableInfo.Column("uid", "INTEGER", true, 1, null, TableInfo.CREATED_FROM_ENTITY));        _columnsStudent.put("name", new TableInfo.Column("name", "TEXT", false, 0, null, TableInfo.CREATED_FROM_ENTITY));        _columnsStudent.put("pwd", new TableInfo.Column("pwd", "TEXT", false, 0, null, TableInfo.CREATED_FROM_ENTITY));        _columnsStudent.put("addressId", new TableInfo.Column("addressId", "INTEGER", true, 0, null, TableInfo.CREATED_FROM_ENTITY));        final HashSet<TableInfo.ForeignKey> _foreignKeysStudent = new HashSet<TableInfo.ForeignKey>(0);        final HashSet<TableInfo.Index> _indicesStudent = new HashSet<TableInfo.Index>(0);        final TableInfo _infoStudent = new TableInfo("Student", _columnsStudent, _foreignKeysStudent, _indicesStudent);        final TableInfo _existingStudent = TableInfo.read(_db, "Student");        if (! _infoStudent.equals(_existingStudent)) {          return new RoomOpenHelper.ValidationResult(false, "Student(com.hongx.room.dao.Student).\n"                  + " Expected:\n" + _infoStudent + "\n"                  + " Found:\n" + _existingStudent);        }        return new RoomOpenHelper.ValidationResult(true, null);      }    }, "59d4098a3eac39a789ec7c792754cd68", "04a8ed3f8162e345b21265f4b4ca7f0d");    final SupportSQLiteOpenHelper.Configuration _sqliteConfig = SupportSQLiteOpenHelper.Configuration.builder(configuration.context)        .name(configuration.name)        .callback(_openCallback)        .build();    final SupportSQLiteOpenHelper _helper = configuration.sqliteOpenHelperFactory.create(_sqliteConfig);    return _helper;  }  @Override  protected InvalidationTracker createInvalidationTracker() {    final HashMap<String, String> _shadowTablesMap = new HashMap<String, String>(0);    HashMap<String, Set<String>> _viewTables = new HashMap<String, Set<String>>(0);    return new InvalidationTracker(this, _shadowTablesMap, _viewTables, "Student");  }  @Override  public void clearAllTables() {    super.assertNotMainThread();    final SupportSQLiteDatabase _db = super.getOpenHelper().getWritableDatabase();    try {      super.beginTransaction();      _db.execSQL("DELETE FROM `Student`");      super.setTransactionSuccessful();    } finally {      super.endTransaction();      _db.query("PRAGMA wal_checkpoint(FULL)").close();      if (!_db.inTransaction()) {        _db.execSQL("VACUUM");      }    }  }  @Override  public StudentDao userDao() {    if (_studentDao != null) {      return _studentDao;    } else {      synchronized(this) {        if(_studentDao == null) {          _studentDao = new StudentDao_Impl(this);        }        return _studentDao;      }    }  }}
import android.database.Cursor;import androidx.room.EntityDeletionOrUpdateAdapter;import androidx.room.EntityInsertionAdapter;import androidx.room.RoomDatabase;import androidx.room.RoomSQLiteQuery;import androidx.room.util.CursorUtil;import androidx.room.util.DBUtil;import androidx.sqlite.db.SupportSQLiteStatement;import java.lang.Override;import java.lang.String;import java.lang.SuppressWarnings;import java.util.ArrayList;import java.util.List;@SuppressWarnings({"unchecked", "deprecation"})public final class StudentDao_Impl implements StudentDao {    private final RoomDatabase __db;    private final EntityInsertionAdapter<Student> __insertionAdapterOfStudent;    private final EntityDeletionOrUpdateAdapter<Student> __deletionAdapterOfStudent;    private final EntityDeletionOrUpdateAdapter<Student> __updateAdapterOfStudent;    public StudentDao_Impl(RoomDatabase __db) {        this.__db = __db;        this.__insertionAdapterOfStudent = new EntityInsertionAdapter<Student>(__db) {            @Override            public String createQuery() {                return "INSERT OR ABORT INTO `Student` (`uid`,`name`,`pwd`,`addressId`) VALUES (nullif(?, 0),?,?,?)";            }            @Override            public void bind(SupportSQLiteStatement stmt, Student value) {                stmt.bindLong(1, value.getUid());                if (value.getName() == null) {                    stmt.bindNull(2);                } else {                    stmt.bindString(2, value.getName());                }                if (value.getPassword() == null) {                    stmt.bindNull(3);                } else {                    stmt.bindString(3, value.getPassword());                }                stmt.bindLong(4, value.getAddressId());            }        };        this.__deletionAdapterOfStudent = new EntityDeletionOrUpdateAdapter<Student>(__db) {            @Override            public String createQuery() {                return "DELETE FROM `Student` WHERE `uid` = ?";            }            @Override            public void bind(SupportSQLiteStatement stmt, Student value) {                stmt.bindLong(1, value.getUid());            }        };        this.__updateAdapterOfStudent = new EntityDeletionOrUpdateAdapter<Student>(__db) {            @Override            public String createQuery() {                return "UPDATE OR ABORT `Student` SET `uid` = ?,`name` = ?,`pwd` = ?,`addressId` = ? WHERE `uid` = ?";            }            @Override            public void bind(SupportSQLiteStatement stmt, Student value) {                stmt.bindLong(1, value.getUid());                if (value.getName() == null) {                    stmt.bindNull(2);                } else {                    stmt.bindString(2, value.getName());                }                if (value.getPassword() == null) {                    stmt.bindNull(3);                } else {                    stmt.bindString(3, value.getPassword());                }                stmt.bindLong(4, value.getAddressId());                stmt.bindLong(5, value.getUid());            }        };    }    @Override    public void insert(final Student... students) {        __db.assertNotSuspendingTransaction();        __db.beginTransaction();        try {            __insertionAdapterOfStudent.insert(students);            __db.setTransactionSuccessful();        } finally {            __db.endTransaction();        }    }    @Override    public void delete(final Student student) {        __db.assertNotSuspendingTransaction();        __db.beginTransaction();        try {            __deletionAdapterOfStudent.handle(student);            __db.setTransactionSuccessful();        } finally {            __db.endTransaction();        }    }    @Override    public void update(final Student student) {        __db.assertNotSuspendingTransaction();        __db.beginTransaction();        try {            __updateAdapterOfStudent.handle(student);            __db.setTransactionSuccessful();        } finally {            __db.endTransaction();        }    }    @Override    public List<Student> getAll() {        final String _sql = "select * from Student";        final RoomSQLiteQuery _statement = RoomSQLiteQuery.acquire(_sql, 0);        __db.assertNotSuspendingTransaction();        final Cursor _cursor = DBUtil.query(__db, _statement, false, null);        try {            final int _cursorIndexOfUid = CursorUtil.getColumnIndexOrThrow(_cursor, "uid");            final int _cursorIndexOfName = CursorUtil.getColumnIndexOrThrow(_cursor, "name");            final int _cursorIndexOfPassword = CursorUtil.getColumnIndexOrThrow(_cursor, "pwd");            final int _cursorIndexOfAddressId = CursorUtil.getColumnIndexOrThrow(_cursor, "addressId");            final List<Student> _result = new ArrayList<Student>(_cursor.getCount());            while (_cursor.moveToNext()) {                final Student _item;                final String _tmpName;                _tmpName = _cursor.getString(_cursorIndexOfName);                final String _tmpPassword;                _tmpPassword = _cursor.getString(_cursorIndexOfPassword);                final int _tmpAddressId;                _tmpAddressId = _cursor.getInt(_cursorIndexOfAddressId);                _item = new Student(_tmpName, _tmpPassword, _tmpAddressId);                final int _tmpUid;                _tmpUid = _cursor.getInt(_cursorIndexOfUid);                _item.setUid(_tmpUid);                _result.add(_item);            }            return _result;        } finally {            _cursor.close();            _statement.release();        }    }}

更多相关文章

  1. “罗永浩抖音首秀”销售数据的可视化大屏是怎么做出来的呢?
  2. Nginx系列教程(三)| 一文带你读懂Nginx的负载均衡
  3. 不吹不黑!GitHub 上帮助人们学习编码的 12 个资源,错过血亏...
  4. Android面试题整理(1)
  5. android 自定义 3D View
  6. Android硬编解码MediaCodec使用笔记
  7. toolbar自定义右边的菜单注意
  8. 查看远程android设备数据库
  9. contentProvider操作

随机推荐

  1. 尝试用css各类选择器添加样式制作一个注
  2. 从0开始搭建云服务器,入门使用教程,搭建个
  3. file_get_contents("php://input")的使用
  4. Composer 自撸一个简单的MVC框架
  5. 云计算未来的发展前景和就业前景怎么样?
  6. 0813 作业
  7. EasyWeChat的简单使用
  8. 你知道 ES6~ES12等叫法是怎么来的吗?
  9. 使用easywechat完成微信接入,并且实现对接
  10. 项目中全局变量的灵活用法