LitePal 数据库使用方法(最新2.0LitePal数据库适用)
转发郭神的blog,讲的非常详细,是基于1.6版本,但现在使用的是2.0,有点差别
https://blog.csdn.net/guolin_blog/article/details/38461239
1.首先说一下常用查看数据库adb命令
手机root后 adb shell ->cd data/data/
ls 展示列表 cd进入应用 cd databases进入数据库
sqlite3 demo.db注意选择有.db文件
.table 展示数据库表格
.mode line 列表形式展示数据
pragma table_info(表名); 注意要有分号 查看表格列信息
select * from 表名; 查看添加内容
ctrl+d 退出sqlite
2.配置
(1)在app module dependencies导入
implementation 'org.litepal.android:java:3.0.0'
(2)在src->main->assets 添加litepal.xml。一定要新建文件+写扩展名的形式,不要直接新建xml
<?xml version="1.0" encoding="utf-8" ?>
<litepal>
<dbname value="demo" ></dbname>
<version value="6" ></version>
<list>
<mapping class="com.tayh.litepaldemo.News"></mapping>
<mapping class="com.tayh.litepaldemo.Comment"></mapping>
<mapping class="com.tayh.litepaldemo.Introduction"></mapping>
<mapping class="com.tayh.litepaldemo.Category"></mapping>
</list>
</litepal>
(3)MyApplication 可以直接继承Application ,初始化LitePal就可以了
public class MyApplication extends Application {
@Override
public void onCreate() {
super.onCreate();
LitePal.initialize(this);
}
}
(4)Activity 调用数据库语句
SQLiteDatabase db = Connector.getDatabase();
(5)News 与Introduction 一对一 外键news_id生成在Introduction里,News本身并没有key,这个需要理解一下。News与Category 多对多,生成key在新生成的category_news表中
public class News extends LitePalSupport {
private int id;
private String title;
private String content;
private Date publishDate;
private int commentCount;
private Introduction introduction;//一对一 外键生成在Introduction表里
private List<Comment> commentList = new ArrayList<Comment>();//一对多
private List<Category> categoryList = new ArrayList<Category>();//多对多
}
public class Introduction extends LitePalSupport {
private int id;
private String guide;
private String digest;
}
public class Comment extends LitePalSupport {
private int id;
private String content;
private Date publishDate;
private News news;//多对一
}
public class Category extends LitePalSupport {
private int id;
private String name;
private List<News> newsList = new ArrayList<News>();//多对多
}

3.增删改查CRUD
(1)存储
* save()方法用于数据储存,返回值为是否存储成功
saveThrows() 存储失败抛出异常
news.getId() 可以获取到储存id
Comment comment1 = new Comment();
comment1.setContent("comment1");
comment1.setPublishDate(new Date());
comment1.save();
News news = new News();
news.setTitle("news1");
news.setContent("content1");
news.setPublishDate(new Date());
news.getCommentList().add(comment1);
news.setCommentCount(news.getCommentList().size());
news.save();

*也可存储集合
List<News> newsList;
...
LitePal.saveAll(newsList);
(2)更新
有两种方式:
方式一:使用ContentValue
ContentValues values = new ContentValues();
values.put("title","test1");//title 列名
LitePal.update(News.class,values,1);//1 是更新列的id
//LitePal.update(News.class,values);//更新所有
条件更新:
ContentValues values = new ContentValues();
values.put("title","test2");
LitePal.updateAll(News.class, values, "title = ? and commentcount > ?", "test1", "0");
方法二:数据直接更新
News updateNews = new News();
updateNews.setTitle("test0");
updateNews.update(1);//id
条件更新:
News updateNews = new News();
updateNews.setTitle("test1");
updateNews.updateAll("title = ? and commentcount > ?", "test0", "0");
注意:如果要恢复默认值使用setToDefault ,set 0无效
News updateNews = new News();
updateNews.setToDefault("commentCount");//commentCount列恢复默认值
updateNews.updateAll();
(3)删除
删除数据的同时,会把该列id作为外键的关联表的数据一起删除
int deleteCount = LitePal.delete(News.class, 1);//id 1
// LitePal.deleteAll(News.class, "title = ? and commentcount = ?", "test1", "0");
判断持久化方法,即是否存到数据库
if (news.isSaved()) {
news.delete();
}
(4)查询
*查询第一个或最后一个
News firstNews = LitePal.findFirst(News.class);
News lastNews = LitePal.findLast(News.class);
*按照多个id查询
List<News> newsList = LitePal.findAll(News.class, 0, 2);
//方法二
long[] ids = new long[] { 0, 1};
List<News> newsList2 = LitePal.findAll(News.class, ids);
*按照条件查询
//查询news表,条件为commentcount >0 ,只要 title content列的数据 ,降序 ,limit(10) 前10条 ,offset(10)偏移量10 即11-20条数据
List<News> newsList3 = LitePal.select("title", "content")
.where("commentcount > ?", "0")
.order("publishdate desc").limit(10).offset(10)
.find(News.class);
激进查询
方法一:设置为true,查出news关联表的数据,不推荐,比较慢
News news = LitePal.find(News.class, 1, true);
List<Comment> commentList = news.getCommentList();
方法二:News表增加getComments()方法。然后需要时再获取list
public class News extends LitePalSupport{
...
public List<Comment> getComments() {
return LitePal.where("news_id = ?", String.valueOf(id)).find(Comment.class);
}
}
News news2 = LitePal.find(News.class, 1);
List<Comment> commentList2 = news2.getComments();
*原生查询
Cursor cursor = LitePal.findBySQL("select * from news where commentcount>?", "0");
- 1
4.聚合函数
LitePal中一共提供了count()、sum()、average()、max()和min()这五种聚合函数
//统计行数
int result = LitePal.count(News.class);
// int result1 = LitePal.where("commentcount = ?", "0").count(News.class);
//结果求和
int result2 = LitePal.sum(News.class, "commentcount", int.class);
//结果求平均
double result3 = LitePal.average(News.class, "commentcount");
//求最大值
int result4 = LitePal.max(News.class, "commentcount", int.class);
//求最小值
int result5 = LitePal.min(News.class, "commentcount", int.class);
LitePal 数据库使用方法(最新2.0LitePal数据库适用)的更多相关文章
- C# Oracle海量数据瞬间插入到数据库的方法
C# 海量数据瞬间插入到数据库的方法 当我们在数据库中进行大量的数据追加时,是不是经常因为数据量过大而苦恼呢?而所谓的海量数据,一般也是上万级的数据,比如我们要添加一百万条数据,应该如何提高它的效率呢 ...
- C# 海量数据瞬间插入到数据库的方法
C# 海量数据瞬间插入到数据库的方法 当我们在数据库中进行大量的数据追加时,是不是经常因为数据量过大而苦恼呢?而所谓的海量数据,一般也是上万级的数据,比如我们要添加一百万条数据,应该如何提高它的效率呢 ...
- SQL Server数据库备份方法
数据库备份,是在数据丢失的情况下,能及时恢复重要数据,防止数据丢失的一种重要手段.一个合理的数据库备份方案,应该能够在数据丢失时,有效地恢复重要数据,同时需要考虑技术实现难度和有效地利用资源. 数据库 ...
- 纯真IP数据库(qqwry.dat)转换成最新的IP数据库格式(ipwry.dat)
纯真IP数据库(qqwry.dat)转换成最新的IP数据库格式(ipwry.dat) 转载自:http://blog.cafeboy.org/2011/02/25/qqwry-to-ipwry/ ht ...
- 让PDF.NET支持最新的SQLite数据库
最近项目中用到了SQLite,之前项目中用的是PDF.NET+MySQL的组合,已经写了不少代码,如果能把写好的代码直接用在SQLite上就好了,PDF.NET支持大部分主流的数据库,这个当然可以,只 ...
- 30多条mysql数据库优化方法,千万级数据库记录查询轻松解决(转载)
1.对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引. 2.应尽量避免在 where 子句中对字段进行 null 值判断,否则将导致引擎放弃使用索 ...
- PHP 链接多种数据库 的方法
数据库中 单词之间的空格(一个语句前面和后面做字符串拼接的时候最好留空格 ) 可以随便加 其他地方 禁止随便加空格!!(加了 就报错)! =====================总结=== ...
- 一个防止误删MSSQL数据库的方法
一个防止误删MSSQL数据库的方法 环境:Windows2008 R2 .SQL 2012 今天发现一个有趣的现象,之前数据库服务器的其中几个数据库做过镜像,不过现在已经删除了,今天又要在那台服务器上 ...
- 查看mysql数据库版本方法总结
当你接手某个mysql数据库管理时,首先你需要查看维护的mysql数据库版本:当开发人员问你mysql数据库版本时,而恰好你又遗忘了,那么此时也需要去查看mysql数据库的版本............ ...
随机推荐
- (转)Jenkins持续集成
(二期)14.持续集成工具jenkins [课程14]持续集...概念.xmind0.6MB [课程14]持续集成...kins.xmind43.3KB [课程14预习]持续...kins.xmind ...
- IDEA查看一个类的所有继承关系
通常一个.java文件对应一个java类. 鼠标右击一个类: 即可查看.按住alt键可放大. 另一快捷键:光标在类名上,ctrl+H
- hihoCoder week10 后序遍历
题目链接 https://hihocoder.com/contest/hiho10/problem/1 给出先序 中序 求 后序 #include <bits/stdc++.h> usi ...
- (转)Awesome Object Detection
Awesome Object Detection 2018-08-10 09:30:40 This blog is copied from: https://github.com/amusi/awes ...
- SAP-批量修改主数据(客户、供应商、物料)
SAP-批量修改主数据(客户.供应商.物料) TCODE: MASS 对于批量修改主数据如客户,供应商等,可以试用一下Mass , 它所能修改的范围如下: 选定要修改的对象后,点击运行,会要求选择需要 ...
- iPhone 尺寸 iPhonex
http://tool.lanrentuku.com/guifan/ui.html 这是本人复制的链接,,如有不适用,,请;联系本人删除链接,,谢谢. iPhone x尺寸 1125x2436@3x ...
- 每日质量NPM包事件绑定_bindme(详解React的this)
一.bindme 官方定义: is a helper to bind a list of methods to an object reference 理解: 因为不推荐在render()里构建函数, ...
- Hadoop 学习路线
大数据实时计算工程师/Hadoop工程师/数据分析师职业路线图 描述 本路线图是一个专门针对大数据实时处理.Hadoop工程师和数据分析师所设计的课程体系介绍,在实时计算方向主要包括了从数据收集框架. ...
- oracle 12c创建可插拔数据库(PDB)及用户
由于oracle 12c使用了CDB-PDB架构,类似于docker,在container-db内可以加载多个pluggable-db,因此安装后需要额外配置才能使用. 一.修改listener.or ...
- ado_基本连接操作【四】
using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Data. ...