android_数据库操作_LitePal框架

LitePal轻量级对象关系映射(ORM),配置简单,下载地址 : https://github.com/LitePalFramework/LitePal

使用步骤
  1. 添加Jar文件

  2. assets文件夹中添加 litepal.xml

<?xml version="1.0" encoding="utf-8"?>
<litepal>
    <dbname value="demo" ></dbname>数据库名称
    <version value="1" ></version>版本号
    <list>
    	<mapping class="com.test.model.Reader"></mapping>对应的实体
    	<mapping class="com.test.model.Magazine"></mapping>
    </list>
</litepal>

 3. 配LitePalApplication

没有自定义Application时<application  android:name="org.litepal.LitePalApplication"  />  

自定义Application需要继承另外一个AnotherApplication,并且这个AnotherApplication还是在jar包当中的,不能修改它的代码。可以把LitePal的源码下载下来,然后把src目录下的所有代码直接拷贝到你项目的src目录下面,接着打开LitePalApplication类,将它的继承结构改成继承自AnotherApplication,再让自定义Application继承自LitePalApplication,这样所有的Application就都可以在一起正常工作了。

LitePal建表

建一张news标就要有对应的News实体类,可以进行对象关系映射的数据类型一共有8种,int、short、long、float、double、boolean、String和Date

public class News {
	private int id;
	private String title;
	private String content;
	private Date publishDate;
	private int commentCount;
	
	// 自动生成get、set方法
	...
}

编辑assets目录下的litepal.xml文件

<?xml version="1.0" encoding="utf-8"?>
<litepal>
    <dbname value="demo" ></dbname>
    <version value="1" ></version>
    <list>
        <mapping class="com.example.databasetest.model.News"></mapping>完整类名
    </list>
</litepal>

获取SQLiteDatabase实例  SQLiteDatabase db = Connector.getDatabase(); 

LitePal升级表

更改litepal.xml中得

<version value="2" ></version> 

<list>   <mapping class="com.example.databasetest.model.News"></mapping>        <mapping class="com.example.databasetest.model.Comment"></mapping>     </list>  

LitePal操作数据

让所有实体对象继承DataSuppert

News news = new News();
news.setTitle("这是一条新闻标题");
news.setContent("这是一条新闻内容");
news.setPublishDate(new Date());
boolean flag = news.save();
news.saveThrows(); //存储失败会抛异常
存储后会自动给id赋上值news.getId();

//存储列表
List<News> newsList;
...
DataSupport.saveAll(newsList);

//修改
ContentValues values = new ContentValues();
values.put("title", "今日iPhone6发布");
DataSupport.update(News.class, values, 2);//指定id

ContentValues values = new ContentValues();
values.put("title", "今日iPhone6 Plus发布");
DataSupport.updateAll(News.class, values, "title = ?", "今日iPhone6发布");

DataSupport.updateAll(News.class, values, "title = ? and commentcount > ?", "今日iPhone6发布", "0"); //约束条件

DataSupport.updateAll(News.class, values);  //无约束条件

News updateNews = new News();  
updateNews.setToDefault("commentCount");  
updateNews.updateAll();//news表中所有新闻的评论数清零

DataSupport.delete(News.class, 2);  //删除记录
DataSupport.deleteAll(News.class, "title = ? and commentcount = ?", "今日iPhone6发布", "0"); 
//删除记录约束条件
DataSupport.deleteAll(News.class);  //删除全部记录

if (news.isSaved()) {  
    news.delete();  
}
LitePal查询
News news = DataSupport.find(News.class, 1); //指定记录
News firstNews = DataSupport.findFirst(News.class);  第一条记录
News lastNews = DataSupport.findLast(News.class); 最后一条记录
List<News> newsList = DataSupport.findAll(News.class, 1, 3, 5, 7); 指定记录成列表
long[] ids = new long[] { 1, 3, 5, 7 };
List<News> newsList = DataSupport.findAll(News.class, ids);指定记录成列表
List<News> allNews = DataSupport.findAll(News.class);  

List<News> newsList = DataSupport.select("title", "content")
		.where("commentcount > ?", "0")
		.order("publishdate desc").limit(10).offset(10)
		.find(News.class);//链式查询
		
News news = DataSupport.find(News.class, 1, true);//映射属性查询,比较耗时不推荐
List<Comment> commentList = news.getCommentList();

public class News extends DataSupport{
	public List<Comment> getComments() {
	return DataSupport.where("news_id = ?", String.valueOf(id)).find(Comment.class);
	}
}

//原生查询
Cursor cursor = DataSupport.findBySQL("select * from news where commentcount>?", "0");


你可能感兴趣的:(android_数据库操作_LitePal框架)