LitePal学习总结 (五)

LitePal框架是郭神的开源框架,郭神博客

先膜拜一下郭神。从本篇开始,开播郭神的LitePal框架的CURD操作。

想要利用LitePal框架使得实体类具有CURD的功能,那么就要先让实体类继承DataSupport这个类。

本篇主要演示插入功能。

以实体类News举例

package org.guya.litepaltest.model;

import java.util.ArrayList;
import java.util.Date;
import java.util.List;

import org.litepal.crud.DataSupport;

public class News extends DataSupport {

	private int id;

	private String title;

	private String content;

	private Date publishDate;

	private int commentCount;

	private List<Comment> commentList = new ArrayList<Comment>();

	private List<Category> categoryList = new ArrayList<Category>();

	...

}

代码里只是让实体类继承了DataSupport类,其他啥都没做,so easy!

接下来,我们来演示一下往News表里插入一条数据。

	/**
	 * 往News表里插入第一条数据
	 */
	private void addMyFirstNews() {
		News news=new News();
		news.setTitle("this is my first news's title");
		news.setContent("this is my first news's content");
		news.setPublishDate(new Date());
		news.save();
	}

然后去onCreate()里调用,别忘了更新一下版本号,因为我们修改了实体类,让其有了新的继承。

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		SQLiteDatabase db = Connector.getDatabase();

		addMyFirstNews();
	}

下面来看一下结果。



这里做一下说明:想在某某表里插入一条记录,首先利用其实体类创建出该实体类对象,然后通过调用setXXX方法来设置表内数据,最后调用save方法保存。

保存成功以后,LitePal会自动为该记录的id赋值到实体id上,以后我们想要调用这个记录的时候,使用其id即可。

注意:save方法的返回值是布尔型的,插入成功返回的是true,否则是false。如果想要在插入记录失败的时候抛出异常,那么在保存记录的时候,请使用saveThrows(),在插入失败的时候会抛出DataSupportException异常。


下面演示表关联

(一)1:1

前面我们介绍了,News表和Introduce表是一对一的关系,一个新闻含有一个介绍,我们可以这样写。

	/**
	 * 往News表的一条新闻,对应一个介绍
	 */
	private void addNewsAndIntroduce() {
		News news2=new News();
		news2.setTitle("我是一个新闻标题");
		news2.setContent("我是一个新闻内容");
		news2.setPublishDate(new Date());
		news2.save();
		
		Introduce i=new Introduce();
		i.setContent("我是一个介绍哟");
		i.setNews(news2);
		i.save();
	}

然后在onCreate()方法里调用。

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		SQLiteDatabase db = Connector.getDatabase();

		//addMyFirstNews();
		addNewsAndIntroduce();
	}

下面给出效果图





(二)1:N

前面我们介绍了,News表和Comment表是1:N的关系,一个新闻可以有多个评论,一个评论只属于一个新闻。

我们可以用代码这样来描述,如下:

	/**
	 * 演示News表和Comment表的1:N关系
	 */
	private void addNewsAndComments() {
		Comment c1 = new Comment();
		c1.setContent("我是评论1");
		c1.setPubDate(new Date());
		c1.save();
		Comment c2 = new Comment();
		c2.setContent("我是评论2");
		c2.setPubDate(new Date());
		c2.save();
		Comment c3 = new Comment();
		c3.setContent("我是评论3");
		c3.setPubDate(new Date());
		c3.save();
		News news3 = new News();
		news3.setTitle("我是第三个新闻标题啦啦啦啦");
		news3.setContent("我是第三个新闻的内容啦啦啦");
		news3.setPublishDate(new Date());
		news3.getCommentList().add(c1);
		news3.getCommentList().add(c2);
		news3.getCommentList().add(c3);
		news3.save();

	}

然后在onCreate()方法里调用

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		SQLiteDatabase db = Connector.getDatabase();

		// addMyFirstNews();
		// addNewsAndIntroduce();
		addNewsAndComments();
	}

效果图如下:




(三)N:N

前面我们介绍了News表和Category表是满足N:N关系的,即一个新闻可能属于多个目录,一个目录里可能含有多个新闻。

下面我们用代码来演示一下。

	/**
	 * 演示News表和Category表的N:N关系
	 */
	private void addNewsAndCategories() {
		News news1 = new News();
		news1.setTitle("1");
		news1.setContent("1.1");
		news1.save();
		News news2 = new News();
		news2.setTitle("2");
		news2.setContent("2.1");
		news2.save();
		News news3 = new News();
		news3.setTitle("3");
		news3.setContent("3.1");
		news3.save();
		News news4 = new News();
		news4.setTitle("4");
		news4.setContent("4.1");
		news4.save();

		Category c1 = new Category();
		c1.setName("社会新闻");
		c1.getNewsList().add(news1);
		c1.getNewsList().add(news4);
		c1.save();
		Category c2 = new Category();
		c2.setName("娱乐新闻");
		c2.getNewsList().add(news1);
		c2.getNewsList().add(news2);
		c2.save();
		Category c3 = new Category();
		c3.setName("军事新闻");
		c3.getNewsList().add(news3);
		c3.save();

	}

然后在onCreate()里调用。

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		SQLiteDatabase db = Connector.getDatabase();

		// addMyFirstNews();
		// addNewsAndIntroduce();
		// addNewsAndComments();
		addNewsAndCategories();
	}

效果图如下:







自此,LitePal的存储演示完毕。啦啦啦






评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值