Android LitePal实战应用

本文介绍了Android数据库框架LitePal的使用,包括如何配置LitePal、创建与升级表、建立表关联,以及如何进行数据的CRUD操作。通过LitePal,开发者可以避免手动编写SQL,简化数据库操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

概述

LitePal是一款开源的Android 数据库框架,它采用了对象关系映射(ORM)的模式,并将我们平时开发最长用到的一些数据库功能进行了封装,能够不用编写一行SQL语句就可以完成各种建表,增删该查的操作。LitePal是一个轻量级的开源库,jar包只有100k不到,而且近乎零配置,使用非常的方便。
github地址:https://github.com/LitePalFramework/LitePal

配置Litepal

1。添加依赖

dependencies {
    compile 'org.litepal.android:core:1.3.2'
}

2。配置litepal.xml
在项目的main/assets目录下面新建一个litepal.xml文件,如下:

<?xml version="1.0" encoding="utf-8"?>  
<litepal>  
    <!--设置项目中数据库的名字 -->
    <dbname value="demo" ></dbname>  

    <!--用于设定数据库的版本号,每次你想要更新数据库,修改该值 -->
    <version value="1" ></version>  

    <!-- 用于设定所有的映射模型,配置对应的类 -->
    <list>  
    </list>  
</litepal> 

3。配置LitePalApplication
我们不愿意每次操作数据库都传递参数Context,为了使APIs简单点,只需要在AndroidManifest.xml中配置一下LitePalApplication,如下:

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

如果我们之前配置了自己的Application,我们只需要修改一下继承结构,让它不要直接继承Application类,而是继承LitePalApplication类,如下:

public class MyApplication extends LitePalApplication {  
    ...  
}

开始使用Litepal

1.创建表
根据对象关系映射模式的理念,每一张表都应该对应一个模型(Model),也就是,想要建一张news表,那么就应该有对应的News模型类。新建一个News类,如下:

public class News extends DataSupport{

    private String title;
    private String  content;
    private Date publishDate;
    private int commentCounts;
    //自动生成get,set方法
}

上面每个字段,对应表中的每一个列。
上面的Model类完成之后,我们还需要将它配置到映射到列表当中,编辑之前assets目录下的litepal.xml文件,在标签中加入News模型类的声明:

<?xml version="1.0" encoding="utf-8"?>
<litepal>
    <dbname value="demo"></dbname>
    <version value="1"></version>
    <list>
        <mapping class="com.example.yumf.mydemo.News"></mapping>
    </list>
</litepal>

注意这里一定要填入News类的完整类名路径。
接下来,你只要对数据库有任何的操作,news表就会被自动创建出来,比如说LitePal提供了一个便捷的方法来获取到SQLiteDatabase的实例,如下:
SQLiteDatabase db = Connector.getDatabase();
以上便完成了表的创建;
2.升级表
当需要新增comment表,只需要如上一样建立一个Comment类,然后修改litepal.xml中的配置,在映射中新增Comment类,并将版本号加1,如下:

<?xml version="1.0" encoding="utf-8"?>
<litepal>
    <dbname value="demo"></dbname>
    <version value="2"></version>
    <list>
        <mapping class="com.example.yumf.mydemo.News"></mapping>
        <mapping class="com.example.yumf.mydemo.Comment"></mapping>
    </list>
</litepal>

这时,如果想要在原有表上,添加或修改某一列时,我们只需要在对应的Model类中,修改对应属性,接着在litepal.xml中对版本号加1就行了,如下所示:

<?xml version="1.0" encoding="utf-8"?>
<litepal>
    <dbname value="demo"></dbname>
    <version value="3"></version>
    . . .
</litepal>

以上就完成了对表的升级处理。
3.建立表关联
使用LitePal来自动建立表关联又是一个非常不错的选择,我们不需要关心什么外键、中间表等实现的细节,只需要在对象中声明好它们相互之间的引用关系,LitePal就会自动在数据库表之间建立好相应的关联关系了。

public class News extends DataSupport {
    . . .
    private List<Comment> comments = new ArrayList<>();
    . . .//自动生成get、set方法
}

public class Comment extends DataSupport {
    . . .
    private News news;
    . . .//自动生成get、set方法
}

保存数据:

        News news = new News();
        news.setTitle("标题1");
        news.setContent("内容");
        news.save();

        Comment comment = new Comment();
        comment.setCounts(10);
        comment.setName("person1");
        comment.setNews(news);
        comment.save();

        Comment com = new Comment();
        com.setCounts(20);
        com.setName("person2");
        com.setNews(news);
        com.save();

我们可以看看数据库表结构
这里写图片描述
4.对数据进行CRUD操作

存储:save(),saveAll()

    News news = new News();  
    news.setTitle("这是一条新闻标题");  
    news.setContent("这是一条新闻内容");  
    news.setPublishDate(new Date());  
    news.save();  

修改:update(),updateAll()

    //修改news表中,id为2的记录为"标题2"
    ContentValues values = new ContentValues();  
    values.put("title", "标题2");  
    DataSupport.update(News.class, values, 2); 
    或:
    News updateNews = new News();  
    updateNews.setTitle("标题2");  
    updateNews.update(2);    

删除:delete(),deleteAll()

    //删除news表中id为2的记录
    DataSupport.delete(News.class, 2); 
    //把news表中所有的数据全部删除掉
    DataSupport.deleteAll(News.class);  

    News news;  
    ...  
    if (news.isSaved()) {   //判断是否持久化
        news.delete();  
    }

查询:find(),findFirst(),findLast(),findAll()

    //查询news表中id为1的这条记录
    News news = DataSupport.find(News.class, 1);  
    //获取news表中的第一条数据
    News firstNews = DataSupport.findFirst(News.class);  
    //获取News表中的最后一条数据
    News lastNews = DataSupport.findLast(News.class);
    //获取多个id对应的数据
    List<News> newsList = DataSupport.findAll(News.class, 1, 3, 5, 7);  
    //查询所有数据
    List<News> allNews = DataSupport.findAll(News.class);  

    List<News> newsList = DataSupport.select("title", "content")  
        .where("commentcount > ?", "0")  
        .order("publishdate desc").limit(10).find(News.class);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值