Android LitePal库详解

Android LitePal的简单使用 为了丰富这个对于Android SQLite的使用,特别写了这篇文章,也算是做一个笔记吧。效果图正文LitePal是Android中比较轻便的开源数据库框架,是郭霖大神写的,本文只做最简单的使用。 阅读详情

一、GitHub

1、GitHub:链接

二、LitePal简介

LitePal 是一个开源 Android 库,它允许开发人员极其轻松地使用 SQLite 数据库。无需编写SQL语句即可完成大部分数据库操作,包括创建或升级表、crud操作、聚合函数等。 LitePal的设置也非常简单,不到5分钟就可以将其集成到你的项目中分钟。

三、LitePal特征

  • 使用对象关系映射 (ORM) 模式。
  • 几乎零配置(只有一个配置文件,属性很少)。
  • 自动维护所有表(例如创建、更改或删除表)。
  • 支持多数据库。
  • 用于避免编写 SQL 语句的封装 API。
  • 很棒的流畅查询 API。
  • 仍然使用 SQL 的替代选择,但比原始 API更简单、更好。

四、配置

1.添加 LitePal 库

在build.gradle文件添加以下依赖项。

dependencies {
    implementation 'org.litepal.guolindev:core:3.2.3'
}

2.创建 litepal.xml 文件

在main文件夹中创建assets文件夹,并在assets文件夹中创建一个文件,并将其命名为litepal.xml。然后把下面的代码复制进去。
在这里插入图片描述

<?xml version="1.0" encoding="utf-8"?>
<litepal>
    <!--
    	定义应用程序的数据库名称。
    	默认情况下,每个数据库名称应以.db结尾。
    	如果没有将数据库的结尾命名为.db,LitePal会自动为你添加后缀。
    	例如:
    	<dbname value="demo" />
    -->
    <dbname value="NewFriend" />

    <!--
    	定义数据库的版本。每次升级数据库时,版本标签都会有所帮助。
    	修改你在mapping标签中定义的模型,只需将版本值加上一,数据库的升级将自动进行,无需担心。
    	例如:
    	<version value="1" />
    -->
    <version value="1" />

    <!--
    	在带有映射标记的列表中定义模型,LitePal将为每个映射类创建表。
    	模型中定义的受支持字段将映射到列中。
    	例如:
    	<list>
    		<mapping class="com.test.model.Reader" />
    		<mapping class="com.test.model.Magazine" />
    	</list>
    -->
    <list>
    	<mapping class="com.test.model.NewFriend" />
    </list>

    <!--
        定义.db文件应位于的位置。
        “internal”是指.db文件将存储在任何人都无法访问的internal storage的数据库文件夹中。
        “external”是指.db文件将存储在主外部存储设备上的目录路径中,应用程序可以将其拥有的所有人都可以访问的持久文件放置在该目录中。
        “internal”将作为默认值。
        例如:
        <storage value="external" />
    -->

</litepal>

这是唯一的配置文件,属性简单。

  • dbname:配置项目的数据库名称。
  • version:配置数据库的版本。每次要升级数据库,加这里的值。
  • list:配置映射类。
  • storage:配置应该存储数据库文件的位置。internal和external是唯一有效的选项。

3. 配置 LitePalApplication

你不想一直传递 Context 参数。为了使 API 变得简单,只需在AndroidManifest.xml 中配置 LitePalApplication如下:

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

当然你可能有自己的应用程序并且已经在这里配置好了,比如:

<manifest>
    <application
        android:name="com.example.MyApplication"
        ...
    >
        ...
    </application>
</manifest>

没关系。LitePal 仍然可以接受。只需在你自己的应用程序中调用LitePal.initialize(context):

public class MyApplication extends Application {

    @Override
    public void onCreate() {
        super.onCreate();
        LitePal.initialize(this);
    }
}

确保尽早调用此方法。在 Application 的 onCreate() 方法中就可以了。并且永远记住使用应用程序上下文作为参数。不要使用任何活动或服务的实例作为参数,否则可能会发生内存泄漏。

五、开始使用

1.创建表

首先定义模型。例如,你有两个模型,Album 和 Song,都继承LitePalSupport 。这些模型可以定义如下:

public class Album extends LitePalSupport {
	
    @Column(unique = true, defaultValue = "unknown")
    private String name;
    
    @Column(index = true)
    private float price;
	
    private List<Song> songs = new ArrayList<>();

    // 生成getter和setter方法。
    ...
}
public class Song extends LitePalSupport {
	
    @Column(nullable = false)
    private String name;
	
    private int duration;
	
    @Column(ignore = true)
    private String uselessField;
	
    private Album album;

    // 生成getter和setter方法。
    ...
}

然后将这些模型添加到 litepal.xml 中的映射列表中:

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

下次操作数据库时会生成这些表。例如,使用以下代码获取 SQLiteDatabase:

SQLiteDatabase db = LitePal.getDatabase();

现在这些表将使用 SQL 自动生成,如下所示:

CREATE TABLE album (
	id integer primary key autoincrement,
	name text unique default 'unknown',
	price real
);

CREATE TABLE song (
	id integer primary key autoincrement,
	name text not null,
	duration integer,
	album_id integer
);

2. 升级表

在 LitePal 中升级表非常容易。只需修改你的模型即可:

public class Album extends LitePalSupport {
	
    @Column(unique = true, defaultValue = "unknown")
    private String name;
	
    @Column(ignore = true)
    private float price;
	
    private Date releaseDate;
	
    private List<Song> songs = new ArrayList<>();

    // 生成的getter和setter方法。
    ...
}

添加了一个 releaseDate 字段,并注释了 price 字段以忽略。然后在litepal.xml 中增加版本号:

    <!--
    	定义数据库的版本。每次升级数据库时,版本标签都会有所帮助。
    	修改你在mapping标签中定义的模型,只需将版本值加上一,数据库的升级将自动进行,无需担心。
    	例如:
    	<version value="1" />
    -->
    <version value="2" />

下次操作数据库时会升级这些表。album 表中将增加一个 releaseDate 列,并删除原来的 price 列。album 表中除删除的列之外的所有数据都将保留。

但是有一些升级情况是 LitePal 无法处理的,升级表中的所有数据都会被清理:

  • 添加一个注释为 的字段 unique = true
  • 将字段的注释更改为 unique = true
  • 将字段的注释更改为 nullable =false

请注意上述会导致数据丢失的情况。

3. 保存数据

保存 API 是非常面向对象的。从 LitePalSupport 继承的每个模型都将免费拥有 save() 方法。

java:

Album album = new Album();
album.setName("album");
album.setPrice(10.99f);
album.setCover(getCoverImageBytes());
album.save();

Song song1 = new Song();
song1.setName("song1");
song1.setDuration(320);
song1.setAlbum(album);
song1.save();

Song song2 = new Song();
song2.setName("song2");
song2.setDuration(356);
song2.setAlbum(album);
song2.save();

Kotlin:

val album = Album()
album.name = "album"
album.price = 10.99f
album.cover = getCoverImageBytes()
album.save()

val song1 = Song()
song1.name = "song1"
song1.duration = 320
song1.album = album
song1.save()

val song2 = Song()
song2.name = "song2"
song2.duration = 356
song2.album = album
song2.save()

这会将album、song1 和 song2 插入到关联的数据库中。

4. 更新数据

最简单的方法,使用 save() 方法更新 find() 找到的记录。

Java:

Album albumToUpdate = LitePal.find(Album.class, 1);
albumToUpdate.setPrice(20.99f); // 提高价格
albumToUpdate.save();

Kotlin:

val albumToUpdate = LitePal.find<Album>(1)
albumToUpdate.price = 20.99f // 提高价格
albumToUpdate.save()

从 LitePalSupport 继承的每个模型也将具有 update() 和 updateAll() 方法。你可以使用指定的 id 更新单个记录。

Java:

Album albumToUpdate = new Album();
albumToUpdate.setPrice(20.99f); // 提高价格
albumToUpdate.update(id);

Kotlin:

val albumToUpdate = Album()
albumToUpdate.price = 20.99f // 提高价格
albumToUpdate.update(id)

或者你可以使用 where 条件更新多个记录。

Java:

Album albumToUpdate = new Album();
albumToUpdate.setPrice(20.99f); // 提高价格
albumToUpdate.updateAll("name = ?", "album");

Kotlin:

val albumToUpdate = Album()
albumToUpdate.price = 20.99f // 提高价格
albumToUpdate.updateAll("name = ?", "album")

5. 删除数据

可以使用 LitePal 中的静态 delete() 方法删除单个记录。

Java:

LitePal.delete(Song.class, id);

Kotlin:

LitePal.delete<Song>(id)

或者使用 LitePal 中的静态 deleteAll() 方法删除多条记录。

Java:

LitePal.deleteAll(Song.class, "duration > ?" , "350");

Kotlin:

LitePal.deleteAll<Song>("duration > ?" , "350")

6. 查询数据

从 song 表中查找具有指定 id 的单个记录。

Java:

Song song = LitePal.find(Song.class, id);

Kotlin:

val song = LitePal.find<Song>(id)

从 song 表中查找所有记录。

Java:

List<Song> allSongs = LitePal.findAll(Song.class);

Kotlin:

val allSongs = LitePal.findAll<Song>()

用流利的查询构造复杂的查询。

Java:

List<Song> songs = LitePal.where("name like ? and duration < ?", "song%", "200").order("duration").find(Song.class);

Kotlin:

val songs = LitePal.where("name like ? and duration < ?", "song%", "200").order("duration").find<Song>()

7. 多个数据库

如果你的应用需要多个数据库,LitePal 完全支持。你可以在运行时创建任意数量的数据库。例如:

LitePalDB litePalDB = new LitePalDB("demo2", 1);
litePalDB.addClassName(Singer.class.getName());
litePalDB.addClassName(Album.class.getName());
litePalDB.addClassName(Song.class.getName());
LitePal.use(litePalDB);

这将创建一个包含 singer 、album 和 song 表的 demo2 数据库。

如果你只想创建一个新数据库但与 litepal.xml 具有相同的配置,你可以使用:

LitePalDB litePalDB = LitePalDB.fromDefault("newdb");
LitePal.use(litePalDB);

还可以随时切换回默认数据库:

LitePal.useDefault();

还可以通过指定的数据库名称删除任何数据库:

LitePal.deleteDatabase("newdb");

8. Transaction

LitePal 支持原子数据库操作的事务。事务中的所有操作将一起提交或回滚

Java usage:

LitePal.beginTransaction();
boolean result1 = // db operation1
boolean result2 = // db operation2
boolean result3 = // db operation3
if (result1 && result2 && result3) {
    LitePal.setTransactionSuccessful();
}
LitePal.endTransaction();

Kotlin usage:

LitePal.runInTransaction {
    val result1 = // db operation1
    val result2 = // db operation2
    val result3 = // db operation3
    result1 && result2 && result3
}

六、混淆

1、如果你使用 ProGuard,你可能需要添加以下选项:

-keep class org.litepal.** {*;}
-keep class * extends org.litepal.crud.LitePalSupport {*;}
Android Material Design控件之Switch|SwitchCompat Material Design Android控件之介绍 开关 Switch|SwitchCompat 自定义属性 Material Design控件之 源码地址:https://github.com/LinweiJ/MaterialDesignWidget 阅读详情

相关推荐

STM32电机库(ST-MC-Workbench)实战指南——三电阻电流采样电路参数配置详解

本文详细解析了STM32电机库(ST-MC-Workbench)中三电阻电流采样电路的参数配置方法,涵盖电阻选型、放大增益计算、滤波时间优化等关键步骤。通过实战案例和调试技巧,帮助工程师快速掌握电流采样技术,提升电机控制系统的精度与稳定性。特别针对ST-MC-Workbench界面参数设置提供了详细指导。

weixin_29186249的博客 505

Android学习之路(16) Android 数据库Litepal

LitePal关系型数据库用起来还是很简单明了的,如果你对文章有什么疑惑或者指正,欢迎评论区留言!

qq_32907491的博客 1541

OpenRadar Matlab版:毫米波雷达信号处理全流程开源库详解

毫米波雷达数据解析与信号处理是感知领域的基础能力。本文介绍毫米波雷达从ADC原始采样到距离-多普勒(Range-Doppler)热图、CFAR检测、DOA估计直至点云与生命体征参数提取的完整处理链路,并深入讲解OpenRadar(Matlab版)开源库的内核设计、核心API与实测经验。从原理上看,距离FFT与多普勒FFT构成RD谱,CFAR自适应阈值实现目标检测,相位解缠与滤波用于呼吸心跳提取。技术价值在于将繁琐的雷达数据读取、矩阵变换和算法流程标准化,免去重复造轮子。可应用于人员存在感知、生命体征监护、4

weixin_33806859的博客 322

2023 Android Studio中LitePal开源库的配置与简单使用

在使用Litepal开源库操作数据库时,进行到这个步骤爆红参考资料经过诸多网上查阅与实际操作后,总结如下使用jar包引入依赖及详细配置步骤。

qq_43357394的博客 3146

python音频信号分析

声音以具有诸如频率、带宽、分贝等参数的音频信号的形式表示,典型的音频信号可以表示为幅度和时间的函数

MAY的博客 2785

远程桌面(RDP)共享USB设备全攻略:不止Hyper-V,你的加密狗和CH340串口也能远程用

本文详细介绍了远程桌面(RDP)共享USB设备的完整解决方案,包括加密狗和CH340串口设备的远程使用技巧。通过RemoteFX USB重定向技术,用户可以在远程会话中无缝使用本地USB设备,提升工作效率。文章涵盖企业级配置、典型设备实战案例及高级故障排除方法,是远程工作者的实用指南。

weixin_42522964的博客 333

Android初学之十七:使用LitePal操作数据库

一、LitePal简介 LitePal是一款开源的Android数据库框架,它采用了对象关系映射(ORM)的模式,并将我们平时开发最常用到的一些数据库功能进行了封装,使得不用编写一行SQL语句就可以完成各种表的建设和增删改查的操作。LitePal的项目主页上也有详细的使用文档,地址是:https://github.com/LitePalFramework/LitePal ...

My_Yes的博客 6382

LM Studio 模型加载与转换实战指南:从GGUF格式到本地部署

本文提供了使用LM Studio加载与转换GGUF格式大语言模型的完整实战指南。详细阐述了为何GGUF格式是本地部署的最佳选择,并逐步指导用户如何将非GGUF模型(如Transformers格式)转换为GGUF格式,以及在LM Studio中进行加载、配置GPU卸载等关键优化,最终实现流畅的本地离线对话体验。

weixin_29061425的博客 920

LitePal:让Android SQLite开发变得极其简单的ORM库

LitePal:让Android SQLite开发变得极其简单的ORM库 【免费下载链接】LitePal 项目地址: https://gitcode.com/gh_mirrors/lit/LitePal ...

gitblog_00963的博客 1030

i.MX6ULL驱动开发 | 31 - Linux内核网络设备驱动框架

net_device结构体在内核中指代一个网络设备,定义在,是一个非常大的结构体,包含网络设备的属性描述和操作接口,其中一些关键的成员如下。Linux在轮询处理机制和中断处理机制的基础上,提出了一种高效的网络处理技术NAPI。NAPI的核心思想是不全部采用中断来读取网络数据,而是采用中断来唤醒数据接收服务程序,在接收服务程序中采用poll的方法来轮询处理数据。提高短数据包的接收效率,减少中断处理的时间。...

Mculover666的博客(嵌入式) 1103

基于Simulink环境,提供一个关于如何对无人机电源DC-DC变换器进行仿真建模的示例

无人机电源要求:无人机的各个子系统(如电机、传感器、通信模块等)可能需要不同级别的电压供应。重要性稳定性:稳定的电源是保证无人机各部件正常工作的基础。效率:高效的电源管理可以显著增加飞行时间和任务执行能力。挑战多负载适应性:需要能够为不同负载提供合适的电压和电流。动态响应:快速响应负载变化的能力对于维持系统稳定性至关重要。首先明确要模拟的任务内容。设计一个能够在不同负载条件下为无人机提供稳定电压的DC-DC变换器。根据无人机的工作状态调整控制策略以维持最佳性能。

xiaoheshang_123的博客 135

Android笔记:LitePal库的更新,DataSupport被弃用问题

在学Android中LitePal相关知识的时候,发现书本《第一行代码》中很多内容都过过期了,在网上找了解决方法,尚且记录一波。

Veggie的博客 8585

【华为OD机试真题】459、小扇和小船的数字游戏、数字游戏 | 机试真题+思路参考+代码解析(CD卷)(C++、Java、Py)

### 🎃题目描述 >小扇和小船今天又玩起来了数字游戏,小船给小扇一个正整数 n(1  现在求 m 的最小值

KJ.JK 1718

Android中的LitePal库

Android中的LitePal库 说明 Android开发使用数据库可以利用这个第三方库,GitHub地址在这里。GitHub上面已经有详细的各种操作方法了,这里不再赘述。 Android studio查看数据库 这次的版本没有自动数据库管理器,需要自行下载第三方插件。位置在file-setting-plugin,搜索database navigator,点击install,然后重新IDE就可以...

mrzhuang 299

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

Android3数据库

安卓数据库存储1-LitePal题记LitePal简介+配置选项Litepal简介配置选项数据库表新建数据库数据库升级增删改查 题记 今天先积累一下安卓数据库操作中比较简单的LitePal,有时间了在把比较复杂的原生安卓的数据库语句总结出来 LitePal简介+配置选项 Litepal简介 LitePal:这是一个开源库,它做的就是采用了对象关系映射(ORM)模式,对常用的数据库语句进行了封装。直白的说就是使用了这个之后,你就不用写SQL语句,像写个类一样的方式去写数据库。 配置选项 LitePal配置的起

m0_52008476的博客 370

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

android查询数据库的封装库,Android数据库存储LitePal与封装调用

本篇博文主要讲解如何利用Android数据库本地搭建存储机制,以及根据某个方法地址,获取到存储的所有节点。做移动开发时,数据库存储是不可避免的。很多需求可以用到数据库。如:登陆的id,password,图表chart的温度,Mac地址等;因此我们就需要去了解Android原生是如何去实现此功能,又几种方式可以实现。接下来就具体的看代码:LitePalSupport数据库操作。一:声明《TmpBea...

weixin_39668890的博客 194

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

告别Application臃肿:用App Startup统一管理你的Android库初始化(附LitePal迁移示例)

本文介绍了如何使用Jetpack的App Startup组件统一管理Android库的初始化,解决Application类臃肿问题。通过详细解析App Startup的核心机制和实战示例(如LitePal迁移),帮助开发者提升代码可维护性和应用启动性能。

weixin_30522183的博客 319

《第一行代码》读书笔记(二)

《第一行代码》读书笔记(二)《第一行代码》读书笔记(二)5.2 开机广播不响应问题6.2 Android Device Monitor找不到使用旧有的monitor使用新添加的工具LitePal依赖6.5 DataSupport类DataSupport类找不到deleteAll方法调用findAll方法调用 《第一行代码》读书笔记(二) 5.2 开机广播不响应问题 这是安卓版本的问题,好像8.0以...

SWY's Workshop 1万+

Android LitePal第三方库使用详解

Android LitePal第三方库使用详解引入LitePal库依赖配置litepal.xml文件dbname 数据库名称version 数据库版本号list 列表标签统一管理映射的实体类mapping 实体类映射全路径storage 数据库存储位置配置LitePalApplication开始演示创建表升级表数据存档修改数据删除数据查询数据异步操作多个数据库监听数据库创建或升级代码混淆结语 LitePal的Github项目地址 引入LitePal库依赖 implementation 'org.lite

weixin_42895893的博客 2402

android如何使用LitePal操作数据库

  1、使用LitePal的第一步:编辑app/build.gradle文件。 在dependencies闭包中添加如下内容: implementation 'org.litepal.android:core:1.4.1'   2、接着在app/src/main目录下新建一个assert目录,然后在asserts目录下再新建一个litepal.xml文件,这个文件的内容如下所示: <?xml version="1.0" encoding="utf-8"

X_tuan_tuan的博客 2030

Android——LitePal第三方数据库框架详解

相信大多数从事Android开发的朋友们越来越发现,找工作越来越难了,面试的要求越来越高了除了基础扎实的java知识,数据结构算法,设计模式还要求会底层源码,NDK技术,性能调优,还有会些小程序和跨平台,比如说flutter,以思维脑图的方式展示在下图;《Android学习笔记总结+移动架构视频+大厂面试真题+项目实战源码》点击传送门,即可获取!break;case R.id.button5: //查相信大多数从事Android开发的朋友们越来越发现,找工作越来越难了,面试的要求越来越高了。

2301_82243139的博客 680

android studio之litepal基本操作

1.litepal是什么    他是一个安卓内置的数据库,在现实中我们有很多数据都不想在下一次上线就全都没有吧,这样数据库就有他存在的意义了,而litepal就是一个现成的数据库。2.首先他存在一个开源库中,我们要先引入他才能进行后面的操作,引入的方式也很简单1.dependencies { implementation fileTree(dir: 'libs', include: ['*...

fbher的博客 3276

【Android入门到项目实战--4.6】—— 如何配置LitePal数据库?

Android,如何使用LitePal操作数据库?如何配置LitePal?

个人博客 1614

LitePal——Android数据库框架完整使用手册

LitePal for Android LitePal是一个开源的Android库,使开发人员使用SQLite数据库非常简单。您无需编写任何SQL语句就可以完成大部分数据库操作,包括创建或升级表,增、删、改、查操作,合计函数等。LitePal的设置也很简单,您只许5分中国就可以将其集成到您的项目中。 现在就开始体验吧! 功能 使用对象关系映射(ORM)模式。几乎零配置(仅有一个

用键盘掌控世界 3187
上一篇: Java 谈谈你对面向对象的理解?
下一篇: Android SimpleDateFormat方法警告
Android Hai
博客等级 码龄7年 30粉丝 43原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Android Hai

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值