1. 程式人生 > >Android開發——資料庫框架Suger遇到的大坑(依據列名查詢不到資料解決辦法)

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