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

本文探讨了在使用Suger ORM框架时遇到的问题:JavaBean中包含大写字母的属性无法正确存储和查询。提供了两种解决方案:一是调整属性名为下划线分隔的小写形式;二是完全避免使用大写字母。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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();
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值