使用LitePal操作数据库
配置:
1、app/build.gradle文件,在dependencies闭包添加compile 'org.litepal.android:core:1.3.2'
2、右击app/src/main目录-new-Directory,创建assets目录,在assets新建一个litepal.xml文件。
3、修改AndroidManifest.xml,在application闭包添加android:name="org.litepal.LitePalApplication"
创建数据库:
1、定义一个Book类,并写其属性的set和get方法
2、修改litepal.xml内容
<litepal>
<dbname value="BookStore" ></dbname>
<version value="1" > </version>
<list>
<mapping class="coe.example.litepaltest.Book"></mapping>
</list>
</litepal>
3、修改MainActivity代码
public void onClick(View v){
Connector.getDatabase();
}
升级数据库:
当需要添加多一个表时,不需要像之前SQLiteOpenHelper类那样,不用在update()方法里执行drop,只需要直接添加类,在litepal.xml里添加多一个map并把版本加1即可。
使用LitePal添加数据:
1、修改Book类,让Book类继承于DataSupport类
2、创建模型类的实例
Book book = new Book();
3、将所有要存储的数据设置好
book.setName("The Dan");
book.setAuthor("Jae");
4、调用save()方法
book.save(); //此方法是从DataSupport类中继承而来的。
使用LitePal更新数据:
有几种更新方式:
1、最简单的:对已存储的对象重新设值,然后重新调用save()方法即可。
Book book = new Book();
book.setName("The Dan");
book.setAuthor("Jae");
book.save();
book.setAuthor("JaeChan77"); // 将作者由Jae更新为JaeChan77
book.save();
2、更加灵巧的更新方式:
Book book = new Book();
book.setName("The Life");
book.setAuthor("cyj");
book.updateAll("name = ? and author = ?","The Dan","Jae"); //修改书名和作者
注意:当想把某一个字段的值更新成默认值时。不可以通过上面的set()方法。
Java中任何一种数据类型的字段都有默认值,int是0,boolean是false,String是null。
使用以下方法:
Book book = new Book();
book.setToDefault("pages"); //将书的页数都更新为默认值,即0
book.updateAll(); //没有指定约束条件,所有是针对所有书的页数都更新为0.
使用LitePal删除数据:
有几种更新方式:
1、最简单的:对已存储的对象调用delete()方法即可。
2、调用DataSupport.deleteAll(Book.class,"price < ?","15");
使用LitePal查询数据:
1、查询表里的所有字段数据:
SQLiteDatabase方式:Cursor cursor = db.query("Book",null,null,,null,null,null,null);
LitePal方式:List<Book> books = DataSupport.findAll(Book.class);
优点:返回值是一个Book类型的List集合,不需要像之前那样再通过Cursor对象一行行去取值了,Lit额Pal已经自动完成了赋值操作。
List<Book> books = DataSupport.findAll(Book.class);
for(Book book: books)
{
Log.d("MainActivity","book name is" + book.getName());
Log.d("MainActivity","book authoris" + book.getAuthor);
...
}
其他:
1、查询Book表中的第一条数据:Book firstBook = DataSupport.findfirst(Book.class);
2、查询Book表中的最后一条数据:Book lastBook = DataSupport.findlast(Book.class);
连缀查询:
1、select()方法:对应SQLiteDatabase的select关键字。
//只查name和author这两列数据:
List<Book> books = DataSupport.select("name","author").find(Book.class);
2、where()方法:对应SQLiteDatabase的where关键字。
//只查页数大于400的数据:
List<Book> books = DataSupport.where("pages > ","400").find(Book.class);
3、order()方法:对应SQLiteDatabase的order by关键字。
//将查询结果按照书价从高到低排序:
List<Book> books = DataSupport.order("price desc").find(Book.class);
注:desc表示降序排列,asc或者不写表示升序排列。
4、limit()方法:用于指定查询结果的数量
//比如只查表中的前3条数据
List<Book> books = DataSupport.limit(3).find(Book.class);
5、offset()方法:用于指定查询结果的偏移量
//比如查询表中的第2条、第3条、第4条数据:
List<Book> books = DataSupport.limit(3).offset(1).find(Book.class);
6、对以上5个方法进行任意的连缀组合:
List<Book> books = DataSupport.select("name","author","pages")
.where("pages > ","400")
.order("pages")
.limit(10)
.offset(10)
.find(Book.class);
//这段代码表示:查询Book表中第11-20条满足页数大于400这个条件的name、author和pages这3列数据,并将查询结果按照页数升序排列。
7、Litepal仍然支持使用原生的SQL来进行查询:
Cursor cursor = Datasupport.findBySQL("select * from Book where pages > ? and price < ?","40","20");