LitePal for Android
LitePal是一个开源的Android库,使开发人员使用SQLite数据库非常简单。您无需编写任何SQL语句就可以完成大部分数据库操作,包括创建或升级表,增、删、改、查操作,合计函数等。LitePal的设置也很简单,您只许5分钟就可以将其集成到您的项目中。
现在就开始体验吧!
功能
使用对象关系映射(ORM)模式。
几乎零配置(仅有一个配置文件,属性值还非常少)。
自动维护所有数据表(例如,创建,更改或删除表)。
支持多数据库
封装了多种API,是开发者避免了编写SQL语句的烦恼。
超实用的查询API。
您仍可以通过编写SQL语句进行操作,但封装好的API会更加方便快捷。
更多功能,敬请期待。
最新版下载
litepal-1.5.1.jar (库中包含 *.class 文件)
litepal-1.5.1-src.jar (库中包含 *.class 文件和 *.java 文件)
快速配置
1. 导入库
使用 Eclipse
在上面的部分下载最新的jar。 或浏览所有版本,选择一个下载。
把jar文件放在您Android项目的libs目录下。
使用 Android Studio
编辑您的 build.gradle 文件,加入如下依赖:
dependencies {
compile 'org.litepal.android:core:1.5.1'
}
2. 配置 litepal.xml
在您项目中创建“assets”目录,并在其中创建“litepal.xml”文件,将下方代码拷贝其中。
这是唯一的配置文件,并且要配置的属性也非常简单。
dbname 配置该项目数据库名称
version 配置数据库版本号。每次您要更新库时,使其值加一。
list 配置映射类。
storage 配置数据库文件的存储位置。 值为“internal” 或 “external”。
3. 配置 LitePalApplication
你不详一直传递Context参数。 为了使API变得简单,只需在AnandManManestest.xml中配置LitePalApplication,如下所示:
android:name="org.litepal.LitePalApplication"
...
>
...
当然,您可能已经在此配置好了您自己的应用程序,如:
android:name="com.example.MyOwnApplication"
...
>
...
这没关系,LitePal也可以接受。 只要在您的程序中调用 LitePal.initialize(context) 即可:
public class MyOwnApplication extends AnotherApplication {
@Override
public void onCreate() {
super.onCreate();
LitePal.initialize(this);
}
...
}
确保尽可能早的调用这个方法。 最好在 onCreate() 方法中调用。并始终记住使用应用程序上下文作为参数。 不要使用任何活动或服务实例作为参数,否则可能会发生内存泄漏。
开始使用
配置成功后,您就可以使用这些功能强大的方法了。
1. 创建数据表
首先建立一个模型。例如您要建立两个模型Album和Song。可以按如下方式定义:
public class Album extends DataSupport {
@Column(unique = true, defaultValue = "unknown")
private String name;
private float price;
private byte[] cover;
private List songs = new ArrayList();
// generated getters and setters.
...
}
public class Song extends DataSupport {
@Column(nullable = false)
private String name;
private int duration;
@Column(ignore = true)
private String uselessField;
private Album album;
// generated getters and setters.
...
}
然后将这些模型添加到litepal.xml映射列表中:
好的!数据表会在您下次操作数据库的时候自动创建。例如,使用以下代码获取SQLiteDatabase:
SQLiteDatabase db = LitePal.getDatabase();
现在这些表会自动生成如下这样的SQL语句:
CREATE TABLE album (
id integer primary key autoincrement,
name text unique default 'unknown',
price real,
cover blob
);
CREATE TABLE song (
id integer primary key autoincrement,
name text not null,
duration integer,
album_id integer
);
2. 更新数据表
使用LitePal更新数据表也非常的简单,只需要吧实例模型修改成您想要的数据就可以:
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 songs = new ArrayList();
// generated getters and setters.
...
}
已添加releaseDate 字段,并注释了price 字段。 然后增加litepal.xml中的版本号:
数据表会在您下次操作数据库的时候自动更新。releasedate 列会被加入到 album 表中,并且 price 列将会被删除掉。album 表中除了被删除的列,其他的数据都依然存在。
但是,对于一些LitePal无法处理的升级条件,升级表中的所有数据将被清除:
添加一个注释为unique = true的字段。
将字段的注释更改为unique = true。
将字段的注释更改为nullable = false。
注意上述导致数据丢失的情况。
3. 保存数据
保存数据的API是面向对象的。从DataSupport继承的每个模型都可以使用save()方法来保存数据:
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();
以上操作会将 album, song1 and song2 插入到数据库中并进行关联。
4. 更新数据
最简单的办法,就是先通过find()方法找到待更新的记录,并使用save()方法更新数据:
Album albumToUpdate = DataSupport.find(Album.class, 1);
albumToUpdate.setPrice(20.99f); // raise the price
albumToUpdate.save();
任何一个集成 DataSupport 类的模块都有 update() 和 updateAll() 两个方法。您可以使用指定的ID更新单个记录:
Album albumToUpdate = new Album();
albumToUpdate.setPrice(20.99f); // raise the price
albumToUpdate.update(id);
或者您也可以通过where条件来更新多条记录:
Album albumToUpdate = new Album();
albumToUpdate.setPrice(20.99f); // raise the price
albumToUpdate.updateAll("name = ?", "album");
5. 删除数据
您可以使用DataSupport类中delete()这个静态方法来删除单条记录:
DataSupport.delete(Song.class, id);
或者使用 deleteAll() 删除多条记录:
DataSupport.deleteAll(Song.class, "duration > ?" , "350");
6. 查询数据
通过指定ID查询单条记录:
Song song = DataSupport.find(Song.class, id);
查询某一表中的所有记录:
List allSongs = DataSupport.findAll(Song.class);
使用API构建复杂查询:
List songs = DataSupport.where("name like ?", "song%").order("duration").find(Song.class);
7. 异步操作
默认情况下,每个数据库操作都在主线程上。如果您的操作可能花费很长时间,例如保存或查询大量记录。 您可能需要使用异步操作。
LitePal支持所有增、删、改、查方法的异步操作。如果要从后台线程的song表中查找所有记录,请使用如下代码:
DataSupport.findAllAsync(Song.class).listen(new FindMultiCallback() {
@Override
public void onFinish(List t) {
List allSongs = (List) t;
}
});
只需使用 findAllAsync() 代替 findAll(), 并附加一个listen()方法,操作一旦完成,查找结果将回调到onFinish()方法。
Abd异步保存是完全相同的:
Album album = new Album();
album.setName("album");
album.setPrice(10.99f);
album.setCover(getCoverImageBytes());
album.saveAsync().listen(new SaveCallback() {
@Override
public void onFinish(boolean success) {
}
});
只需使用saveAsync()替代save()。它会将Album异步保存到数据库中,保存结果将回调到onFinish()方法。
8. 多数据库
如果您的应用需要多个数据库,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");
Android 数据库框架总结(转)
转自 http://blog.csdn.net/da_caoyuan/article/details/61414626 一:OrmLite 简述: 优点: 1.轻量级:2.使用简单,易上手:3.封装完 ...
Android 数据库框架总结,总有一个适合你!
一:OrmLite 简述: 优点: 1.轻量级:2.使用简单,易上手:3.封装完善:4.文档全面.缺点:1.基于反射,效率较低(本人还没有觉得效率低):2.缺少中文翻译文档 jar包 地址:http: ...
Android 数据库框架OrmLite的使用(一)
在这里记录下最基本的用法,官网上可了解相关的介绍. 1.下载OrmLite jar 在下载android的:ormlite-android-4.48.jar和ormlite-core-4.48.jar ...
Android数据库框架——GreenDao轻量级的对象关系映射框架,永久告别sqlite
Android数据库框架--GreenDao轻量级的对象关系映射框架,永久告别sqlite 前不久,我在写了ORMLite这个框架的博文 Android数据库框架--ORMLite轻量级的对象关系映射 ...
Android数据库框架——ORMLite轻量级的对象关系映射(ORM)Java包
Android数据库框架--ORMLite轻量级的对象关系映射(ORM)Java包 事实上,我想写数据库的念头已经很久了,在之前写了一个答题系统的小项目那只是初步的带了一下数据库,数据库是比较强大的, ...
Android 数据库框架ormlite
Android 数据库框架ormlite 使用精要 前言 本篇博客记录一下笔者在实际开发中使用到的一个数据库框架,这个可以让我们快速实现数据库操作,避免频繁手写sql,提高我们的开发效率,减少出错的机 ...
Android数据库框架-----ORMLite关联表的使用
上一篇已经对ORMLite框架做了简单的介绍:Android数据库框架-----ORMLite 的基本用法~~本篇将介绍项目可能会使用到的一些用法,也为我们的使用ORMLite框架总结出一个较合理的用 ...
Android数据库框架-----ORMLite 的基本用法
ORMLite 是一款非要流行的Android平台上的数据库框架,性能优秀,代码简洁: 简述: 优点: 1.轻量级:2.使用简单,易上手:3.封装完善:4.文档全面. 缺点:1.基于反射,效率较低(本 ...
DBExecutor android 数据库框架
https://github.com/eltld/DBExecutor android 数据库框架,sqlite database
随机推荐
关于HTML是什么,能做什么
HTML(Hyper Text Mark-up Language )即超文本标记语言,是 WWW 的描述语言,由 Tim Berners-lee提出.设计 HTML 语言的目的是为了能把存放在一台电脑 ...
[注意]SerialPort操作PCI-1621D多串口卡,出现异常";参数不正确";
开发LED大屏显示.40-20mA模拟量输出的时候,经常要与串口打交道.但是Windows自带的SerialPort串口操作组件貌似兼容性 不是太好,或是SerialPort本身有BUG,在操作PCI ...
Linux学习笔记6-Linux根目录下各个目录的作用
/bin:存放最常用命令: /boot:启动Linux的核心文件: /dev:设备文件: /etc:存放各种配置文件: /home:用户主目录: /lib:系统最基本的动态链接共享库: /mnt:一 ...
解题报告 HDU1176 免费馅饼
免费馅饼 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submis ...
在Linux下用gcc编译hello world
1. 确保Linux系统里已经装好了gcc 测试:输入gcc后是如下的结果就说明已经安装成功 2. 创建HelloWorld.c 使用 touch 创建一个空文件; 用vim编辑 按下A或者I 插入 ...
创建maven工程的时候卡死的解决办法
在idea的maven,runner,properties里面添加 archetypeCatalog=internal
基于Django rest framework 和Vue实现简单的在线教育平台
一.基于api前端显示课程详细信息 1.调整Course.vue模块 ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 2 ...
python------面向对象进阶反射详解(重点)
一.反射 通过字符串映射或者修改程序运行时的状态,属性,或者方法. 1.getattr(object,name,default=None) 2.hasattr(object,name) 3.setat ...
获取linux服务进程号
ps -ef | grep "服务名" | grep -v "grep" | awk '{print $2}' # ps -ef|grep "被查询的 ...
黄聪:保持web页面生成的app一直处于用户登录状态不退出
用户登录了会员中心,怎么保持登录状态! 由于封壳的内核及组件肯定没有浏览器APP应用那么强大,所以目前暂时的解决方案是: jquery.cookie.js 本文转载至:https://www.cnb ...