Android SQLite轻量框架LitePal基本使用

来源:互联网 发布:搞不好是洗衣粉 知乎 编辑:程序博客网 时间:2024/05/16 19:00

简介

LitePal是一个开源的安卓库,允许程序员极其简单的操作SQLite数据库。甚至不用写一句SQL语句就能完成大多数SQLite数据库操作,包括创建去或者更新表,CRUD操作,聚合操作等等。

特点

  • 使用对象关系映射模型(ORM)。
  • 基本上0配置,仅仅需要一个配置文件。
  • 自动与表保持联动(创建、修改或者删除)。
  • 多数据库支持。
  • 对SQL语句进行封装。
  • 简洁的查询语句。
  • 同时支持原生API的使用。

配置

  1. 导入库

    下载jar文件或者直接在gradle中引入依赖:

    dependencies {   compile 'org.litepal.android:core:1.5.1'}
  2. 配置litepal.xml文件

    创建assert文件夹(与res同级),在其中创建litepal.xml文件,在里面如下配置:

    <?xml version="1.0" encoding="utf-8"?><litepal>   <!--    定义数据库的名称,默认情况下需要添加后缀.db,如果没有添加litepal内部将会自动添加该后缀   -->   <dbname value="demo" />   <!--    定义数据库的版本,每次你想升级数据库的时候在此处进行版本号定义.通常当你修改了下面mapping中的model类后需要升级,版本号加一   -->   <version value="1" />   <!--    定义模型类(如同javabean)在mapping标签中,litepal将会为每个类创建一个表,表中的列将是类中声明为private的成员.例如:      <list>        <mapping class="com.test.model.Reader" />        <mapping class="com.test.model.Magazine" />    </list>   -->   <list>   </list>   <!--    定义数据库文件创建在内部存储还是外部存储,值为internal或者external       默认为internal       例如:       <storage value="external" />   -->   <storage value="external" /></litepal>
  3. 配置LitePalApplication

    为了避免每次使用都需要传递Context变量,可以直接在AndroidManifest.xml文件中使用LitePalApplication.

    <manifest>   <application       android:name="org.litepal.LitePalApplication"       ...   >       ...   </application></manifest>

    如果有自定义的Application,让它继承至LitePalApplication即可.然后需要Application的onCreate方法中初始化:

    public class MyOwnApplication extends AnotherApplication {   @Override   public void onCreate() {       super.onCreate();       LitePal.initialize(this);   }   ...}

使用

  1. 创建表

    定义模型类,假如创建了一个Album类:

    public class Album extends DataSupport {   @Column(unique = true, defaultValue = "unknown")   private String name;   private float price;   private byte[] cover;   private List<Song> songs = new ArrayList<Song>();   // generated getters and setters.   ...}

    然后在配置文件litepal.xml文件中配置:

    <list>   <mapping class="org.litepal.litepalsample.model.Album" /></list>

    之后在你下次操作数据库时该表自动创建.你就假设该表已经存在,当你打开,插入数据等操作时litepal检测到表不存在将会自动创建.

  2. 更新表

    直接对模型类进行修改:

    public class Album extends DataSupport {   @Column(unique = true, defaultValue = "unknown")   private String name;   @Column(ignore = true)   private float price;   private byte[] cover;   private Date releaseDate;   private List<Song> songs = new ArrayList<Song>();   // generated getters and setters.   ...}

    这里添加了一个releaseDate变量(字段),price变量(字段)注释为忽略.

    然后在litepal.xml文件中更新版本号:

    <!-- 假设之前版本号为1 --><version value="2" ></version>

    表将会在下次对数据库进行操作时更新,添加一个releaseDate字段,移除price字段.

  3. 保存数据

    继承自DataSupport的子类将会有save方法,调用即可保存数据到数据库:

    Album album = new Album();album.setName("album");album.setPrice(10.99f);album.setCover(getCoverImageBytes());album.save();
  4. 查询数据

    查询单条数据根据id:

    Album album = DataSupport.find(Album.class, id);

    条件查询:

    //注意问号List<Album> albums = DataSupport.where("name=?", "fantasy").order("price").find(Album.class);
  5. 更新数据

    查询到数据取得模型类的对象,调用set方法修改后调用save保存即可.

    Album albumToUpdate = DataSupport.find(Album.class, 1);albumToUpdate.setPrice(20.99f); // raise the pricealbumToUpdate.save();
  6. 删除数据

    和查询数据用法类似.

    根据id删除单条数据:

    DataSupport.delete(Song.class, id);

    删除所有数据:

    DataSupport.deleteAll(Song.class, "duration > ?" , "350");
  7. 异步操作

    当操作的数据量过大时可能需要异步操作避免当前线程阻塞,litepal支持所有CRUD操作方法异步操作.(都有对应的async方法)

    例如:

    DataSupport.findAllAsync(Song.class).listen(new FindMultiCallback() {   @Override   public <T> void onFinish(List<T> t) {       List<Song> allSongs = (List<Song>) t;   }});

    如果需要的话,调用listen方法添加该操作的监听器.

原创粉丝点击