daoAndroid知识

GreenDao3.2使用本地(Assets)数据库

2017-03-31  本文已影响818人  woitaylor

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从而获取数据库每个字段值。

上一篇下一篇

猜你喜欢

热点阅读