You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
load records error : java.lang.IllegalStateException: Cannot access database on the main thread since it may potentially lock the UI for a long period of time.
前言
由于Restful的流行,客户端的发展是越来越轻。客户端直接操作数据库的场景已经越来越少。
但是安卓本地数据库仍然有少量的应用场景。
安卓比较常用的是Sqlite数据库,但是我们并不是直接操作sql语句。而是使用一个Room的中间件。
简要的了解了一下room。你就会发现和.net 的一代经典EntityFramewrok非常近似。
EF是ORMapping的巅峰
什么是ORM
ORM :对象关系映射(英语:Object Relational Mapping,简称ORM,或O/RM,或O/R mapping),用于实现面向对象编程语言里不同类型系统的数据之间的转换。
O(面向对象) <-----> ORMapping <-----> R(面向关系)
这里主要有个抽象的过程,毕竟Database是百花齐放,如果把业务逻辑直接和数据库底层捆绑是很痛苦的事情,通过对象这个中间层来解耦可以大大提高效率。
快速入门
这里我们使用RxJava作为异步支持库
第一次下载特别是第一次预编译速度比较慢
使用Entity注解定义表
使用ColumnInfo定义列
使用PrimaryKey定义主键,设置autoGenerate=true可以让数据库制定
自增长主键很有年代感。
这应该是JAVA的概念,这里我理解为对数据做 CURD操作的接口
这里我们直接做了“跳级”,同步方法还需要另外开线程执行基本被抛弃了。我直接使用Rx异步的api
这里@dao来修饰操作类
@query、@update、@delete、 @insert来修饰方法对应database的不同操作
注意这里只要声明方法就行了,并不需要实现
组件会帮我们自动生成实现类,这一点和retrofit2这个组件用法是一样的。
更高一级的抽象,可以认为是Database的映射
这里应用部分,建议使用单实例,RoomDatabase并不是一个“轻量级”对象
这里数据库操作是不允许在UI线程执行的,这个和OKHttp的规矩差不多
这里修改也比较简单,直接加subscribeOn(Schedulers.io())就行
load records error : java.lang.IllegalStateException: Cannot access database on the main thread since it may potentially lock the UI for a long period of time.
增加第一条记录
怎么查看数据?
对标SqlServer这种“传统数据库”,Sqllite总觉得缺点啥,对了。
我怎么用工具来看数据,独立于程序之外。
完美对标SQLServer的查询分析器,这里不细说了
步骤就是先进入adb shell。
然后进入到数据库目录,/data/data/{application name}/databases/
为啥没有权限?没关系要su一下哦
输入sqlite3 {database name}命令,(这里不能直接按文档来,程序自建的数据库是没.db后缀名的)
输入sql语句,可以输入多行记得用;结尾
使用Ctrl+D或者.exit退出
参考链接
安卓开发者教程
Demo仓库
The text was updated successfully, but these errors were encountered: