Android开发——数据库框架Suger遇到的大坑(依据列名查询不到数据解决办法)
JavaBean命名出现大写,数据无法正常存储(用的是Suger第二种操作方式,第一种没有测试)
习惯中对Bean中变量的命名会出现大写字母,但使用Suger操作这样的数据会出现问题,比如我这样命名了一个变量:
@Table
public class HomeItem {
@Expose
public boolean isDelete;
public boolean isDelete() {
return isDelete;
}
public void setDelete(boolean delete) {
isDelete = delete;
}
}
我想对该变量在数据库中的值进行查询:
homeItemLists = Select.from(HomeItem.class)
.where(Condition.prop("isDelete").eq(0))
.list();
该语句表示取出HomeItem表中“isDelete”为“false”的所有数据,注意对布尔类型数据进行查询时“eq()”中写“0”表示“false”,写“1”表示“true”,不能写成这样:
.where(Condition.prop("isDelete").eq("false"))
结果报错显示找不到“isDelete”,但查询整个表显示出确实有“isDelete”一栏,数据库中有该项栏位却不能赋值更不能依据此栏位查询到数据,这就很矛盾。
处理办法:
方法一:
在Suger ORM官网:http://satyan.github.io/sugar/query.html 最后面有这样一句话:
Property names are not converted currently. So, it'd be the table column names (conversion eg: testUnderscore => test_underscore, which can be obtained by calling StringUtil.toSQLName("testUnderscore")).
所以将“isDelete”写成“is_delete”这么写就可以顺利取出数据:
homeItemLists = Select.from(HomeItem.class)
.where(Condition.prop("is_delete").eq(0))
.list();
方法二:
在给Bean命名时不出现大写字母就可以不操心上述名称转换问题:
@Table
public class HomeItem {
@Expose
public boolean isdelete;
public boolean isdelete() {
return isdelete;
}
public void setDelete(boolean delete) {
isdelete = delete;
}
}
homeItemLists = Select.from(HomeItem.class)
.where(Condition.prop("isdelete").eq(0))
.list();