Android開發——資料庫框架Suger遇到的大坑(依據列名查詢不到資料解決辦法)
阿新 • • 發佈:2018-11-05
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();