今天介绍谷歌推出的一个数据库room使用
1在工程的build里面添加下面依赖,注意你的工程需要指出androidX;如果不支持可以使用AS的Refactor切换支持
// room数据依赖 def room_version = "2.2.0" //room数据库 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支持kotlin // implementation "androidx.room:room-ktx:$room_version" // optional - RxJava support for Room支持RXJava implementation "androidx.room:room-rxjava2:$room_version" // optional - Guava support for Room, including Optional and ListenableFuture 支持guava implementation "androidx.room:room-guava:$room_version" // Test helpers支持单元测试 testImplementation "androidx.room:room-testing:$room_version"
//build通过说明可以开始使用数据库了。
//1创建表,创建个类使用@Entity注解(表名,不写以类名为表名);每张表必须定义个主键,使用@PrimaryKey(autoGenerate=true) 字段int类型;列使用ColumnInfo注解(name=列明)
/** * 注解entity 建表 * <p> * 这就相当表的结构信息 */ @Entity public class Student { /** * 注意一张表必须有主键注解Primarykey 字段类型为int */ @PrimaryKey(autoGenerate = true) private int uid; //列的信息 columnInfo @ColumnInfo(name = "name") private String name; @ColumnInfo(name = "password") private String password; @ColumnInfo(name = "addressId") private int addressId; /** * 注意字段必须有get set方法 */ 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; } public Student(int uid, String name, String password, int addressId) { this.uid = uid; this.name = name; this.password = password; this.addressId = addressId; } @Override public String toString() { return "Student{" + "uid=" + uid + ", name='" + name + '\'' + ", password='" + password + '\'' + ", addressId=" + addressId + '}'; } }
//2创建一个数据操作接口类,进行增删改查;接口使用Dao注解 方法就是增删改查的方法
/** * 这就是数据访问对象 * 用于操作数据的API * <p> * 使用注解Dao * <p> * 写增删改查的类 */ @Dao public interface StudentDao { /** * 查所有数据 * * @return */ @Query("select * from Student") List<Student> getAll(); /** * 插入数据 */ @Insert void insert(Student... students); }
//3创建个数据库抽象类,使用Database注解 (entities={表类},库版本号);注意类需要继承RoomBDatabse;
/** * 定义数据库 * * 使用注解 @Database * entities对应的是 需要保存到数据库的 表类(注意每张表都需要添加进入,使用逗号分隔) * version 数据库的版本号 * * 数据库需要继承RoomDatabase */ @Database(entities = {Student.class},version = 1) public abstract class AppDatabase extends RoomDatabase { //定义个抽象方法获取表对象 public abstract StudentDao userDao(); }
//4使用数据库,注意数据库操作需要在子线程里面,调用系统API。获取数据库类,在获取表操作类(增删改查类),
调用接口里面方法,实现对表的增删改查操作。
public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); //注意网络操作,数据库操作需要在线程操作 new Thread() { @Override public void run() { super.run(); //操作数据库 /** * 调用系统API获取数据库 * 参数(上下文,数据库类,数控名称) */ AppDatabase appDatabase = Room.databaseBuilder(getApplicationContext(), AppDatabase.class, "AaronDB").build(); //获取dao接口类 StudentDao studentDao = appDatabase.userDao(); //创建数据 Student student = new Student(1, "张三", "1234", 100); //调用接口 插入数据方法 studentDao.insert(student); //调用接口 查询所有数据方法 List<Student> all = studentDao.getAll(); Log.e("zdh", "-------------数据库" + all.toString()); } }.start(); } }
//room的简单使用介绍到这。
源码地址https://github.com/zhudaihao/room