Android开发——数据库框架Suger遇到的大坑(依据列名查询不到数据解决办法)

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();

猜你喜欢

转载自blog.csdn.net/weixin_39142112/article/details/78006635