LitePal是GitHub上一款开源的Android数据库框架.
它采用了对象关系映射(ORM)的模式,将平时开发时最常用的一些数据库功能进行了封装,使得开发者不用编写一行SQL语句就可以完成各种建表、増删改查的操作。
并且LitePal很“轻”,jar包大小不到100k,而且近乎零配置。
核心:1)从表中读取到数据,展现给用户;2)把数据存储到表中。
特点:1)完全不需要使用sqlite语句; 2)以面向对象的方式操作数据库。
Github地址:https://github.com/LitePalFramework/LitePal
LitePal使用配置
1) 添加依赖 compile 'org.litepal.android:core:1.3.1'
2) 配置 litepal.xml文件
3) 配置 LitePalApplication,让我们的application继承自LitePalApplication,清单文件。
mapping 标签主要是用于做映射对象的,一个对象对应一张表,每个实体类是对应一张表的。创建实体类,就相当于创建了一张表。
1)每个实体类都要继承自DataSupport类。
2)实体类的名字会自动映射成表名。字段名,会自动映射成列名。
3)把所有的数据都存储为字符串类型,不要int,时间也存储为字符串类型。
4)默认会给每张表创建一个id,id是自增的,所以不能重名的。
5)实体类写完后(get和set方法),要配置mapping的,Class一定要指向类的全称。
在使用 LitePal 框架的时候 , 在项目的 assets 目录下面新建一个 litepal.xml 文件 , 其中的内容包括数据库的名称 , 版本 , 以及映射 , 那它如何去把这些内容映射进去的 ?
文件名只能叫litepal.xml;
通过getAssets()读到本地的asset里面的文件,那文件名Const.LitePal.CONFIGURATION
_FILE_NAME对比,相同的话就读到本地文件了.
在 LitePal 框架的使用中 , 需要配置 AndroidManifest.xml , 在application 中加入android:name="org.litepal.LitePalApplication". 因为LitePalApplication继承自类Application;并不会影响程序的正常使用。
关于数据库中的字段:抽取公共的字段,想在表中存储哪些字段呢?就是对象拥有哪些属性呢。
一、建表操作
数据库操作,上来肯定是要建表啊。虽然android原生的SQLiteOpenHelper很强大, 但还是得自己去写sql语句。创建表,一行代码都不需要写,只需要创建一个实体类,所对应的表就会自动创建。
二、如何查询数据,如何获取数据源?
查询表中的数据,只需要一行代码就能搞定的。因为对应了存在的实体模型。
创建一个集合,泛型是要查询的对象。
DataSupport类的使用 指定你要从哪一张表中读取数据,字节码文件
mList=DataSupport.findAll(); 返回查询到的集合,一行代码完成查询操作。
需要显示收到推送消息的时间,需要存储到数据库中。
String time; 是String类型
三、如何向数据库中存储数据?
创建一个实体类的对象,然后调用set方法,最后实体类对象.save() 就好了。
只要这一个方法,就可以把所有的数据存储到表当中。
把当前的时间存储到数据库中;
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd hh:mm");
String time = simpleDateFormat.format(new Date());
SimpleDateFormat 记得时间格式 yyyy-mm-dd hh:mm
format() 获取当前的时间字符串
注意一下set完数据别忘了save()一把,save()方法哪来的? 别忘了我们的实体类继承自DataSupport。
四、如何删除表中的某一条数据?
获取条目的下标;然后从集合里面,获取到对应的对象NotificationHistory对象;
将这条数据从数据库删除掉,完全是按照面向对象的方式 进行操作数据库的。
如何删除表中的所有数据?
DataSupport.deleteAll(News.class);
1)清空数据表(某一个表)中的数据;
2)用户点击这个按钮,会做哪几种事情? 逻辑一定要清楚(共做了三件事)
LitePal采取的是对象关系映射(ORM)的模式,Object Relational Mapping)那么什么是对象关系映射呢?简单点说,我们使用的编程语言是面向对象语言,而我们使用的数据库则是关系型数据库,那么将面向对象的语言和面向关系的数据库之间建立一种映射关系,这就是对象关系映射了。
但是我们为什么要使用对象关系映射模式呢?这主要是因为大多数的程序员都很擅长面向对象编程,但其中只有少部分的人才比较精通关系型数据库。而且数据库的SQL语言晦涩难懂,就算你很精通它,恐怕也不喜欢经常在代码中去写它吧?而对象关系映射模式则很好地解决了这个问题,它允许我们使用面向对象的方式来操作数据库,从而可以从晦涩难懂的SQL语言中解脱出来。
那么接下来我们就看一看LitePal中是如何建表的吧。根据对象关系映射模式的理念,每一张表都应该对应一个模型(Model),也就是说,如果我们想要建一张news表,就应该有一个对应的News模型类。新建一个News类。表中的每一列其实就是对应了模型类中的一个字段,比如news表中有id、title、content、publishdate、commentcount这几个列,那么在News类中就也应该有这几个字段。其中id这个字段可写可不写,因为即使不写这个字段,LitePal也会在表中自动生成一个id列,毕竟每张表都一定要有主键的嘛。
根据LitePal的数据类型支持,可以进行对象关系映射的数据类型一共有8种,int、short、long、float、double、boolean、String和Date。
既然是自动映射的话,如果News类中有一个字符串字段我并不想让它映射到数据库表中,这该怎么办呢?对此,LitePal同样采用了一种极为轻量的解决方案,只有声明成private修饰符的字段才会被映射到数据库表中,如果你有某一个字段不想映射(不想存储)的话,只需要将它改成public、protected或default修饰符就可以了。
现在只要你对数据库有任何的操作,news表就会被自动创建出来。比如说LitePal提供了一个便捷的方法来获取到SQLiteDatabase的实例,SQLiteDatabase db = Connector.getDatabase();
dbname是指定数据库名称,这里不需要加.db哦。 version不用想也知道是指定数据库的版本了(那是不是以后修改数据库版本只要该这个值就可以了? 嘿嘿, 必须就是这么简单),还有个list,list节点下有两个mapping仔细观察原来是声明的我们刚开始建立的那两个实体类。
http://www.xuebuyuan.com/2225432.html 关于数据库的复杂操作。
消息历史记录模块:
id: pushID 这个没有意义 消息的id,标示消息的唯一性的
model: order 标识是哪类消息的
created_at: push时间 消息的推送事件
body: 消息体 消息的主题内容"您有一条新的订单消息"
contentDetails:消息实体 所有的json字符串 怎么解析都是个问题啊
用户是否点击了通知栏? 没有点击,新到来的消息就是未读消息啊
点击了部分,数据库怎么标示每一条消息是否读过啊?
如果用户删除了通知栏,没有查看消息,那么消息列表里面应该是有的 MainUI 要有提醒的,未读消息数量。
查看推送历史消息的功能; 必须要使用到数据库的;数据库表用于存储所有的历史消息。
数据库操作框架:LitePal
到通知栏,点击后查看详情;但是只能查看一次。
离线消息数量的统计