前言
LitePal支持的数据类型有8种,分别为:
int、short、long、float、double、boolean、String和Date
然而在进行boolean类型操作的时候,还是有些问题的,下面就来具体讲讲。
本文参考以下链接:
Android数据库高手秘籍(二)——创建表和LitePal的基本用法
官网
今天要讲解的内容包括:
- boolean的存储原理
- boolean增删改查的具体操作
一.boolean的存储原理
对于LitePal数据库而言,存储boolean值为true的时候可以直接用LitePal存储对象的方式存储,若存储的对象中boolean为false,需要调用setToDefault(String name)方法存储,其中参数name为对象中Boolean属性的名称,为字符串
boolean值其实是以0和1的方式存到数据库中的,true=1,false=0,所以在查询的时候需要注意
下面以一个例子做讲解
二.先抛出数据表类Customer
当然,需要在litepal.xml中注册此model,然后视具体情况而定看是否需要升级数据库,下面是Customer类代码:
package com.android.model;
/**
* Title:
* Description:
*
* Created by pei
* Date: 2017/12/20
*/
public class Customer extends DataBaseModel{
private String phoneNum;
private boolean vip;
public String getPhoneNum() {
return phoneNum;
}
public void setPhoneNum(String phoneNum) {
this.phoneNum = phoneNum;
}
public boolean isVip() {
return vip;
}
public void setVip(boolean vip) {
this.vip = vip;
}
}
针对以上类做数据操作:
三.添加数据
//添加新用户
public void insertCustomer(Customer customer){
boolean isVip=customer.isVip();
if(!isVip){
customer.setToDefault("vip");
}
customer.save();
}
需要注意的是setToDefault("vip");中的"vip"为Customer中对应的boolean类型得属性名称,是字符串类型,在activity中调用如下:
//添加一个Boolean为false的对象
Customer customer=new Customer();
customer.setPhoneNum("1238418");
customer.setVip(false);
insertCustomer(customer);
//添加一个Boolean为true的对象
Customer customer1=new Customer();
customer1.setPhoneNum("7777");
customer1.setVip(true);
insertCustomer(customer1);
四.删除数据
删除电话号码为xxx的用户
public void deleteCustomerByPhoneNum(String phoneNum){
if(StringUtil.isNotEmpty(phoneNum)){
DataSupport.deleteAll(Customer.class,"phoneNum=?",phoneNum);
}
}
activity中调用如下:
//删除
deleteCustomerByPhoneNum("13129953903");
五.更新数据
直接对boolean值做更改的方法如下:
//更新,将所有用户设为vip/非vip
public void changeVip(boolean isVip){
ContentValues values=new ContentValues();
values.put("vip",isVip);
DataSupport.updateAll(Customer.class, values, "vip = ?", !isVip?"1":"0");
}
在activity中调用如下:
//更新,将所有用户设为vip/非vip
changeVip(false);//将所有vip转成非vip
changeVip(true);//将所有true非vip转成vip
根据电话号码修改boolean值
//更新,将xxx电话号码的用户转成vip
public void changeVipByPhoneNum(String phoneNum,boolean isVip){
if(StringUtil.isNotEmpty(phoneNum)){
ContentValues values=new ContentValues();
values.put("vip",isVip);
DataSupport.updateAll(Customer.class, values, "phoneNum = ?", phoneNum);
}
}
在activity中调用如下:
changeVipByPhoneNum("13129953903",true);
六.查询数据
查询所有:
//查询所有
public List getAllCustomerList(){
List customerList = DataSupport.findAll(Customer.class);
if(customerList==null){
customerList=new ArrayList<>();
}
return customerList;
}
activity中调用如下:
//查询所有
ListallList=getAllCustomerList();
for (Customer c : allList) {
LogUtil.e(MainActivity.class, "====查询所有===c=" + c.toString());
}
根据电话号码查boolean,代码如下:
//根据电话号码查是否为vip
public boolean whetherVipByphoneNum(String phoneNum){
if(StringUtil.isNotEmpty(phoneNum)){
List customerList = DataSupport.where("phoneNum=?",phoneNum).find(Customer.class);
if(CollectionUtil.isNotEmpty(customerList)){
Customer customer=customerList.get(0);
if(customer!=null){
return customer.isVip();
}
}
}
return false;
}
activity中调用如下:
//根据电话号码查是否为vip
boolean isVip=whetherVipByphoneNum("13129953863");//13129953863
LogUtil.e(MainActivity.class, "====whetherVipByphoneNum===isVip=" + isVip);
根据boolean值查电话号码,代码如下:
//查询 是/不是 vip的电话号码
public List getCustomerListByVip(boolean isVip){
String vip=isVip?"1":"0";
List customerList = DataSupport.where("vip=?",vip).find(Customer.class);
if(customerList==null){
customerList=new ArrayList<>();
}
return customerList;
}
在activity中调用如下:
//查询 是vip的电话号码
ListvipList=getCustomerListByVip(true);
for (Customer c : vipList) {
LogUtil.e(MainActivity.class, "====是vip的电话号码===c=" + c.toString());
}
//查询 不是vip的电话号码
ListnotVipList=getCustomerListByVip(false);
for (Customer c : notVipList) {
LogUtil.e(MainActivity.class, "====不是vip的电话号码===c=" + c.toString());
}
七.注意事项
- 当Customer需要存储flase时,需要调用setToDefault(" ")方法
- 当boolean属性为查询条件时,不是直接以boolean值为true或false为查询条件,而是以字符串“0”或“1”为查询条件,例如下面:
public List getCustomerListByVip(boolean isVip){
String vip=isVip?"1":"0";
List customerList = DataSupport.where("vip=?",vip).find(Customer.class);
if(customerList==null){
customerList=new ArrayList<>();
}
return customerList;
}
- DataSupport.where(...),DataSupport.updateAll(...)和DataSupport.deleteAll(...)等方法里面涉及到的参数都是String,即意味着当你查询条件为boolean,int,long等非String类型参数时要转化成String参数进行查询,例如:
public List getCustomerListByVip(boolean isVip){
String vip=isVip?"1":"0";
List customerList = DataSupport.where("vip=?",vip).find(Customer.class);
if(customerList==null){
customerList=new ArrayList<>();
}
return customerList;
}
以上方法中以boolean为查询条件时,vip并不是int类型的0或1,而是字符串类型
- DataSupport.where(...)涉及到多个参数条件查询时可以用类似以下方式查询:
DataSupport.where(Person.class,"name=? and sex=?","小花","女");
ok,今天关于LitePal对于boolean的数据操作处理就讲到这里了,谢谢大家。