转发郭神的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数据库适用)的更多相关文章

  1. C# Oracle海量数据瞬间插入到数据库的方法

    C# 海量数据瞬间插入到数据库的方法 当我们在数据库中进行大量的数据追加时,是不是经常因为数据量过大而苦恼呢?而所谓的海量数据,一般也是上万级的数据,比如我们要添加一百万条数据,应该如何提高它的效率呢 ...

  2. C# 海量数据瞬间插入到数据库的方法

    C# 海量数据瞬间插入到数据库的方法 当我们在数据库中进行大量的数据追加时,是不是经常因为数据量过大而苦恼呢?而所谓的海量数据,一般也是上万级的数据,比如我们要添加一百万条数据,应该如何提高它的效率呢 ...

  3. SQL Server数据库备份方法

    数据库备份,是在数据丢失的情况下,能及时恢复重要数据,防止数据丢失的一种重要手段.一个合理的数据库备份方案,应该能够在数据丢失时,有效地恢复重要数据,同时需要考虑技术实现难度和有效地利用资源. 数据库 ...

  4. 纯真IP数据库(qqwry.dat)转换成最新的IP数据库格式(ipwry.dat)

    纯真IP数据库(qqwry.dat)转换成最新的IP数据库格式(ipwry.dat) 转载自:http://blog.cafeboy.org/2011/02/25/qqwry-to-ipwry/ ht ...

  5. 让PDF.NET支持最新的SQLite数据库

    最近项目中用到了SQLite,之前项目中用的是PDF.NET+MySQL的组合,已经写了不少代码,如果能把写好的代码直接用在SQLite上就好了,PDF.NET支持大部分主流的数据库,这个当然可以,只 ...

  6. 30多条mysql数据库优化方法,千万级数据库记录查询轻松解决(转载)

    1.对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引. 2.应尽量避免在 where 子句中对字段进行 null 值判断,否则将导致引擎放弃使用索 ...

  7. PHP 链接多种数据库 的方法

    数据库中  单词之间的空格(一个语句前面和后面做字符串拼接的时候最好留空格 )  可以随便加   其他地方  禁止随便加空格!!(加了 就报错)! =====================总结=== ...

  8. 一个防止误删MSSQL数据库的方法

    一个防止误删MSSQL数据库的方法 环境:Windows2008 R2 .SQL 2012 今天发现一个有趣的现象,之前数据库服务器的其中几个数据库做过镜像,不过现在已经删除了,今天又要在那台服务器上 ...

  9. 查看mysql数据库版本方法总结

    当你接手某个mysql数据库管理时,首先你需要查看维护的mysql数据库版本:当开发人员问你mysql数据库版本时,而恰好你又遗忘了,那么此时也需要去查看mysql数据库的版本............ ...

随机推荐

  1. 通过WSL在Windows下安装子Linux系统

    一.开启开发者模式 步骤: -> 系统设置 -> 更新和安全 -> 针对开发人员 -> 选择开发者模式 点击后会自动安装环境 二.启用WSL 步骤: -> 系统设置 -& ...

  2. 【做题】BZOJ2534 L-gap字符串——调和级数

    题意:给出一个字符串,问其中有多少个子串恰好为\(uvu\)的形式.其中,\(u\)非空,\(v\)的长度恰好为\(l\). \(n \leq 5 \times 10^4\) 我们设两个后缀的起点分别 ...

  3. Chrome浏览器F12开发者工具的几个小技巧总结

    1.直接修改页面元素 选择页面上元素,右键“检查”,会打开开发者工具窗口,显示当前选择元素的源代码,可以双击进行修改.如果要修改的东西比较多,可以折叠元素并单击选择,再右键Edit as HTML修改 ...

  4. 题解——loj6280 数列分块入门4 (分块)

    分块维护一个区间和 然后记得更新的时候左边角块的tag不要打错到右边角块 #include <cstdio> #include <algorithm> #include < ...

  5. GCN code parsing

    GCN code parsing 2018-07-18 20:39:11 utils.py  --- load data  def load_data(path="../data/cora/ ...

  6. 【ASP.NET】 MVC下拉框联动

    这个case主要是我在做项目的时候遇到一个需要根据input控件输入的内容,动态填充dropdown list中的内容, 实现二者联动的需求.在搜索了一些资源后,这篇博客解决了我的问题,所以记录并转载 ...

  7. 【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 ...

  8. pgAdmin的数据导入之CSV

    在向数据库批量导入数据时,可以参考此过程 1.对于现有的Excel文件,首先应另存为 .csv文件,记住分割符(逗号分割),在后边导入用到. 2.用记事本打开保存后的csv文件,以utf-8格式另存为 ...

  9. hadoop的Linux操作

    初学hadoop之linux系统操作的hdfs的常用命令 Hadoop之HDFS文件操作 Hadoop fs命令详解 官网doc sudo su - hdfs:免密,以hdfs账户登陆.可操作hdfs ...

  10. Ubuntu 14.04 上安装 Gurobi

    参考: Installing Gurobi 7 on Linux Ubuntu 14.04 上安装 Gurobi 1.在gurobi上创建一个账户,并登陆: 2.从gurobi optimizer上下 ...