zoukankan      html  css  js  c++  java
  • SQlite数据库框架:LitePal

    常用的数据库框架
    Android的发展的速度是难以置信的,Android出来哪一年我还在小学上学很,还能很清楚的记得,那年一切,但是那个时候的我怎么可能也不会想到自己将来会要去做Android.Android数据库的框架很多,选择自己喜欢的,不用掌握很多,选择自己喜欢的就好.

    Sugar&GreenDao&Afinal&ORMLite&Realm&LiteOrm&DBFlow&ActiveAndroid&LitePal

    SugarORM 是对象关系映射模式。不用写复杂的sql语句,而用简单的API即可完成创建和操纵数据;可以在原有的Bean上仅仅添加小的修改而复用Bean;简化而明了的数据库设计和创建过程,同时提供表的一对多的支持。

    GreenDao 是为Android设计的对象关系映射(ORM)工具。它提供了对象到关系型数据库SQLite的相应接口。为了在Android工程中使用greenDao,需要创建另一个“生成器”工程,它的任务是在你的工程域里生成具体的代码。因此相比与其它ORM框架具有出众性能。

    Afinal 是一个android的sqlite orm 和 ioc 框架。同时封装了android中的http框架,使其更加简单易用。FinalDB模块,android中的orm框架,一行代码就可以进行增删改查。支持一对多,多对一等查询。

    ORMLite (Object Relational Mapping Lite)提供了一些轻量级持久化Java对象到SQL数据库,同时也避免了复杂性和更多的标准的ORM包的开销功能。它支持的SQL数据库使用JDBC的数量,还支持原生的Android操作系统数据库API调用sqlite。

    Realm 是用来替代sqlite的一种解决方案,它有一套自己的数据库存储引擎,比sqlite更轻量级,拥有更快的速度,并且具有很多现代数据库的特性,比如支持JSON,流式api,数据变更通知,自动数据同步,简单身份验证,访问控制,事件处理,最重要的是跨平台,目前已有Java,Objective C,Swift,React-Native,Xamarin这五种实现。

    LiteOrm 是android上的一款数据库(ORM)框架库。速度快、体积小、性能高。开发者基本一行代码实现数据库的增删改查操作,以及实体关系的持久化和自动映射。设计原则:轻量、专注、性能优先、线程无关,专注数据及其关系存储和操作;无需工具辅助,不需要无参构造,不需要繁多注解,约定优于配置;使用极致简约,例如:db.save(u); db.query(U.class); db.deleteAll(U.class);。

    DBFlow 综合了 ActiveAndroid, Schematic, Ollie,Sprinkles 等库的优点。同时不是基于反射,所以性能也是非常高,效率紧跟greenDAO其后。基于注解,使用apt技术,在编译过程中生成操作类,使用方式和ActiveAndroid高度相似,使用简单。无缝支持多个数据库,使用annotation processing提高速度,ModelContainer类库可以直接解析像JSON这样的数据,增加灵活性的丰富接口。

    ActiveAndroid 是采用活动记录(Active Record)架构模式设计的适用于Android平台的轻量级ORM架构

    LitePal 是对象关系映射(ORM)模型。它使开发者使用SQLite数据库变得非常容易。 你可以不用写一句SQL语句就可以完成大部分数据库操作,包括创建表,更新表,约束操作,聚合功能等等。

     
    LitePal
    LitePal的集成和简单的使用
    LitePal中实现增删改查
    LitePal一些常用的API介绍
     
    LitePal的集成和简单的使用
    引入相应的类库
    compile 'org.litepal.android:core:1.6.1'
    这个可以去项目源码中找到最新的类库

    创建相应的litepal.xml文件
    首先这个文件是在相应的assets文件夹下(创建方法为项目文件夹下New->Folder->Assets Folder就可以创建相应的assets文件夹了),然后在assets文件夹下创建一个相应的litepal.xml文件夹,下面是具体的内容:

    <?xml version="1.0" encoding="utf-8"?>
    <litepal>
    <dbname value="file"/>
    <version value="1"/>
    <list>
    <mapping class="com.hejin.download.FileInfo"/>
    </list>
    </litepal>
    这里说明几点问题:

    dbname标签是相应的数据库名称

    version标签是相应的数据库的版本,这里注意当里面引用的内容发生改变的时候,要升级相应的版本

    list标签是那些对象需要数据库管理,这里注意mapping里面的路径一定要是全路径名称

    这里面list标签中的实体类都应该继承DataSupport这个类,这个千万别忘记

    更换继承的Application
    这里其实份两种情况:

    已经有继承的Application

    直接继承LitePalApplication

    为什么分为这两种情况呢?因为有的项目中可能之前实现Application已经继承了一个其他类型的Application了,那么这个时候因为java的单继承,所以这里就不能直接继承LitePalApplication了,但是LitePal已经帮我们想到这个问题了,所以说下面我们分两种情况实现一下:

    第一种

    直接在相应项目中的Application中的onCreat()方法中初始化一下就可以了,像下面这样:

    @Override
    public void onCreate() {
    super.onCreate();
    LitePal.initialize(this);
    }
    这样你的Application可以随便继承其他的Application

    在manifest.xml中引入相应的Application,也就是你之前的Application

    第二种

    直接继承相应的LitePalApplication这里就不用在onCreat()中调用LitePal.initialize(this);这个方法了;

    这个就比较特殊了要在相应的application标签中添加Application的时候要这样写android:name="org.litepal.LitePalApplication"

     
    LitePal中实现CRUD(增删改查)
    LitePal添加数据
    关于相应的增加操作,这里主要是通过对象的save()进行的,怎么说呢?其实你只要给相应的类添加了相应的集体参数然后调用相应的save()方法就可以了.具体代码如下:

    LitePalBean zhangSanBean = new LitePalBean("张三", "20", "男");
    zhangSanBean.save();
    LitePalBean liSiBean = new LitePalBean("李四", "25", "男");
    liSiBean.save();
    这样就形成了相应的数据库的表结构了,也就是有了相应的数据库了,但是如果你在手机上调试的不Root的话是看不到的.这里说明一个问题添加相同的内容是可以添加进去的

    LitePal删除数据
    关于删除数据的操作,这里主要是通过对象的delete()或者deleteAll()进行删除,具体代码如下:

    /*这里就是删除所有名字是张三的*/
    DataSupport.deleteAll(LitePalBean.class, "name =?", "张三");

    LitePalBean zhangSanBean = new LitePalBean("张三", "20", "男");
    zhangSanBean.save();
    zhangSanBean.delete();
    这里删除的两种方式:

    直接对象删除:也就是对象直接调用delete();方法进行;

    根据类型进行删除,其实这里就是相当于SQLite进行删除,这里有必要说明一下第二个语句传入内容如果为"name=?"代表的是所有name为后面字段的内容,也就是所有名字为张三的内容都会删除.那么你会问了如果这里面我传入两个内容呢?比如"name=? and age=?"对没错,就是用and进行连接

    LitePal更新数据
    这里其实很简单,就是更改完相应的数据直接save保存就可以了,代码如下:

    LitePalBean zhaoWuBean = new LitePalBean("赵五", "25", "男");
    zhaoWuBean.save();
    zhaoWuBean.setAge("30");
    zhaoWuBean.save();
    这里有一个问题,感觉应该是先取出来这个对象在进行操作才对,才能确保内容的正确性.

    LitePal查询方法
    关于查询数据的操作,主要用到find()和findAll()等相应的方法,具体代码如下:

    List<LitePalBean> all = DataSupport.findAll(LitePalBean.class);
    for (int i = 0; i < all.size(); i++) {
    Log.e(TAG, "query: " + all.get(i).toString());
    }
    }
     
    LitePal常用的API
    DataSupport.findFirst(XXX.class)
    查询XXX列表中的第一个元素

    DataSupport.findLast(XXX.class)
    查询XXX列表中的最后一个元素

    DataSupport.select()
    根据SQLite中的关键字进行查找,例如DataSupport.select("name","age").find(XXX.class) 查询的是相应名字和年龄的两列数据 其他的数据是查不出来的.

    DataSupport.where()
    相当于SQLite中的where关键字查找,这里还是举个例子->DataSupport.where("name=?","张三").find(XXX.class) 查询的是所有名字为张三的数据内容;

    DataSupport.order()
    相当于SQLite中的order关键字查找,主要是排序方式,这里还是举个例子->DataSupport.order(price desc).find(XXX.class) 这里面是按照降序进行排列的;desc标识降序排列,**asc
    **代表升序排列

    DataSupport.limit()
    查询数据库的结果的数量 例子->DataSupport.limit(3).find(XXX.class); 查询3条数据

    DataSupport.offset()
    查询制定结果的偏移量 例子(我想查询第二条第三条和第四条)-> DataSupport.limit(3).offset(1).find(XXX.class); 这里是从第一条开始,但是不包含相应的第一条
    --------------------- 

  • 相关阅读:
    CodeForces 681D Gifts by the List (树上DFS)
    UVa 12342 Tax Calculator (水题,纳税)
    CodeForces 681C Heap Operations (模拟题,优先队列)
    CodeForces 682C Alyona and the Tree (树上DFS)
    CodeForces 682B Alyona and Mex (题意水题)
    CodeForces 682A Alyona and Numbers (水题,数学)
    Virtualizing memory type
    页面跳转
    PHP Misc. 函数
    PHP 5 Math 函数
  • 原文地址:https://www.cnblogs.com/ly570/p/10977614.html
Copyright © 2011-2022 走看看