Android-Room数据库的使用方法教程Room是一个持久性数据库,提供了SQLite的抽象层,以便在充分利用SQLite的同时允许流畅的数据库访问。
这篇文章主要介绍了详细介绍Android-Room数据库的使用,小编觉得挺不错的,现在分享给大家,也给大家做个参考。
一起跟随小编过来看看吧。
为什么会选择Room?前面我也说到了现在也有不少开源的数据库给大家使用,那为什么我们还要去学习使用这个库呢?当然不是我前面说的“正不正统”的原因了。
因为Room有下面几个优点:①SQL查询在编译时就会验证- 在编译时检查每个@Query和@Entity等,这就意味着没有任何运行时错误的风险可能会导致应用程序崩溃(并且它不仅检查语法问题,还会检查是否有该表)②较少的模板代码③与LiveData 集成该如何使用它?1、在app/build.gradle中添加以下依赖implementation 'android.arch.persistence.room:runtime:1.0.0'annotationProcessor 'android.arch.persistence.room:compiler:1.0.0'你可以点击这里查看最新依赖版本号2、创建JavaBean@Entitypublic class User {@PrimaryKey(autoGenerate = true)//主键是否自动增长,默认为falseprivate int id;private String name;private int age;public int getId() {return id;}public void setId(int id) {this.id = id;}public String getName() {return name;}public void setName(String name) { = name;}public int getAge() {return age;}public void setAge(int age) { this.age = age;}//这里的getter/setter方法是必须的}这里需要使用@Entity 来注解该类至少要有一个主键@PrimaryKey3、创建Dao接下来,需要为我们的实体创建DAO。
DAO代表数据访问对象,所以它是告诉我们的数据库如何操作数据的一种方式:@Daopublic interface UserDao {@Query("SELECT * FROM user")List getAllUsers();@Insertvoid insert(User... users);@Updatevoid update(User... users);@Deletevoid delete(User... users);}使用@Dao 注解该接口@Insert , @Update , @Delete , @Query 代表我们常用的插入、更新、删除、查询数据库操作@Insert , @Update , @Delete 可以传入多种不同的参数。
例如:@Insertvoid insert(User... users);@Insertvoid insert(User user);@Insertvoid insert(List userLists);同理,@Query 也可以返回多种不同的类型。
@Query("SELECT * FROM user")List getAllUsers();@Query("SELECT * FROM user WHERE id=:id")User getUser(int id);@Query("SELECT * FROM user")Cursor getUserCursor();当然,除了这些我们还可以传入一些限制符进去。
例如,@Query("SELECT * FROM user WHERE age=:age")List getUsersByAge(int age);@Query("SELECT * FROM user WHERE age=:age LIMIT :max")List getUsersByAge(int max, int... age);4、创建数据库@Database(entities = { User.class }, version = 1,exportSchema = false)public abstract class UserDatabase extends RoomDatabase {private static final String DB_NAME = "UserDatabase.db";private static volatile UserDatabase instance;static synchronized UserDatabase getInstance(Context context) {if (instance == null) {instance = create(context);}return instance;}private static UserDatabase create(final Context context) {return Room.databaseBuilder(context,UserDatabase.class,DB_NAME).build();}public abstract UserDao getUserDao();}这里使用@Database 注解该类并添加了表名、数据库版本(每当我们改变数据库中的内容时它都会增加),所以这里使用exportSchema = false注意:除了添加表映射的类以及和数据库版本外,还要添加exportSchema = false 否则会报警告。
Error:(10, 17) 警告: Schema export directory is not provided to the annotation processor so we cannot export the schema. You can either provide room.schemaLocation annotation processor argument OR set exportSchema to false.我们抽象了getUserDao() 方法,这是必要的。
5、使用数据库我们终于能够操作我们的数据库了。
但是所有的操作必须在后台线程中完成。
你可以通过使用AsyncTask ,Thread ,Handler ,RxJava 或其它方式来完成。
如果没有在后台线程执行,并且也没有说明可以在主线程操作的话,就会报以下错误。
Caused by: ng.IllegalStateException: Cannot access database on the main thread since it may potentially lock the UI for a long period of time.例如,我们可以像下面这样插入数据User user=new User();user.setName("name1"); user.setAge(18);UserDatabase.getInstance(context).getUserDao().insert(user);或者这样List allUsers = UserDatabase.getInstance(RoomActivity.this).getUserDao().getAllUsers();好了,基本的使用的方式就这些了。
补充:MySQL 数据库常用命令create database name; 创建数据库use databasename; 进入数据库drop database name 直接删除数据库,不提醒show tables; 显示表describe tablename; 查看表的结构select 中加上distinct去除重复字段mysqladmin drop databasename 删除数据库前,有提示。
显示当前mysql版本和当前日期select version(),current_date;数据库维护方法在MySQL使用的过程中,在系统运行一段时间后,可能会产生碎片,造成空间的浪费,所以有必要定期的对MySQL进行碎片整理。
当删除id=2的记录时候,发生的现象这个时候发现磁盘的空间并没有减少。
这种现象就叫做碎片化(有一部分的磁盘空间在数据删除以后(空),还是无法被操作系统所使用。
)常见的优化:# alter table xxx engine myisam;# optimize table t1;注意: 在实际开发的过程中,上面两个语句尽量少使用,因为在使用的过程中,MySQL的表的结构会整体全部重新整理,需要消耗很多的资源,建议在凌晨两三点钟的时候执行。
(在linux下有定时器脚本可以执行,crontab)数据库相关文章:1.excel怎么将表格连入数据库2.把Excel数据导入到数据库的方法3.数据库中default的用法4.linux下mysql关闭数据库命令行5.excel数据导入SQL数据库的教程。