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数据库的版本............ ...
随机推荐
- 通过WSL在Windows下安装子Linux系统
一.开启开发者模式 步骤: -> 系统设置 -> 更新和安全 -> 针对开发人员 -> 选择开发者模式 点击后会自动安装环境 二.启用WSL 步骤: -> 系统设置 -& ...
- 【做题】BZOJ2534 L-gap字符串——调和级数
题意:给出一个字符串,问其中有多少个子串恰好为\(uvu\)的形式.其中,\(u\)非空,\(v\)的长度恰好为\(l\). \(n \leq 5 \times 10^4\) 我们设两个后缀的起点分别 ...
- Chrome浏览器F12开发者工具的几个小技巧总结
1.直接修改页面元素 选择页面上元素,右键“检查”,会打开开发者工具窗口,显示当前选择元素的源代码,可以双击进行修改.如果要修改的东西比较多,可以折叠元素并单击选择,再右键Edit as HTML修改 ...
- 题解——loj6280 数列分块入门4 (分块)
分块维护一个区间和 然后记得更新的时候左边角块的tag不要打错到右边角块 #include <cstdio> #include <algorithm> #include < ...
- GCN code parsing
GCN code parsing 2018-07-18 20:39:11 utils.py --- load data def load_data(path="../data/cora/ ...
- 【ASP.NET】 MVC下拉框联动
这个case主要是我在做项目的时候遇到一个需要根据input控件输入的内容,动态填充dropdown list中的内容, 实现二者联动的需求.在搜索了一些资源后,这篇博客解决了我的问题,所以记录并转载 ...
- 【ASP.NET】System.Web.Routing - StopRoutingHandler Class
Provides a way to specify that ASP.NET routing should not handle requests for a URL pattern. ex: rou ...
- pgAdmin的数据导入之CSV
在向数据库批量导入数据时,可以参考此过程 1.对于现有的Excel文件,首先应另存为 .csv文件,记住分割符(逗号分割),在后边导入用到. 2.用记事本打开保存后的csv文件,以utf-8格式另存为 ...
- hadoop的Linux操作
初学hadoop之linux系统操作的hdfs的常用命令 Hadoop之HDFS文件操作 Hadoop fs命令详解 官网doc sudo su - hdfs:免密,以hdfs账户登陆.可操作hdfs ...
- Ubuntu 14.04 上安装 Gurobi
参考: Installing Gurobi 7 on Linux Ubuntu 14.04 上安装 Gurobi 1.在gurobi上创建一个账户,并登陆: 2.从gurobi optimizer上下 ...