GreenDao3.2使用本地(Assets)数据库
GreenDao3.2简介
Android开发中我们或多或少都会接触到数据库。Android中提供了一个占用内存极小的关系型数据库-SQLite。虽然Android系统中提供了许多操作SQLite的API,但是我们还是需要手动去编写SQL语句,这经常会出现一些莫名其妙的问题。所以便出现了许多ORM(对象关系映射)框架。其中比较著名的有GreenDao等。
1.性能最大化,可能是Android平台上最快的ORM框架
2.易于使用的API
3.最小的内存开销
4.依赖体积小
5.支持数据库加密
6.强大的社区支持
GreenDao3.2使用本地数据库
GreenDao基本使用简单,但是不注意的话也是很难发现问题。下面直接进入主题:
数据库的表格式如下:
数据库在项目里面的位置:
拷贝数据库代码
我们确定了需要拷贝的路径databasepath并创建了异步任务mCopyDataBaseTask;
接下来我们定义了两个方法getDatabaseFilepath、getDatabaseFile,前者是获取了将要拷贝的目录,后者是获取了数据库文件的路径。
经过一系列的判断语句我们最终执行mCopyDataBaseTask.execute(sfile);
没错,我们开始了异步任务,传入了数据库文件的路径。
我们来到AsyncTask,在doInBackground方法中我们通过getAssets方法来获取AssetManger的引用(基础薄弱的这里有必要解释一下:assets文件夹里面的文件都是保持原始的文件格式,需要用AssetManager以字节流的形式读取文件。来自Resources和Assets 中的文件只可以读取而不能进行写的操作。)通过open方法我们得到字节流并写入到指定的目录文件中完成拷贝。
至此AsyncTask任务执行完成。
GreenDao的Bean类
值得注意的细节在Bean类Entity注解:
1.nameInDb:在数据库中使用的别名,默认使用的是实体的类名,需要根据我们将要查询的表面赋值。
接下来我们创建了数据库实体类TvTable,@Property:设置一个非默认关系映射所对应的列名,默认是使用字段名,例如:@Property(nameInDb = "name")。
重要的地方我们再说一次:
1.字段BRAND_CN,@Property(nameInDb = "BRAND_CN")这里一定要指定为“BRAND_CN”列名不然greenDao自动生成的列名为BRAND__CN注意会多了一个下划线,这个很重要。自动生成规则为首字母大写驼峰使用下划线代替,如nameEn--->Name_En;下面的MODEL不需要是因为自动生成的还是这个名字。很重要。
2.字段ID,注意这里一定要有 @Property(nameInDb = "ID")这个属性,数据类型为Long或者long,很重要。
最后我们创建了queryInfraredDB查询方法,通过queryRawCreate方法接受sqlRaw-sql语句,获得Query。
遍历Query从而获取数据库每个字段值。