最近在使用SqlBrite时,发现所写的where in语句居然无效
```
mBriteDb.createQuery(DbTable.TB_NAME, "Select * from "+ RPDbTable.RouteGps.TB_NAME
+" where "+ RPDbTable.RouteGps.CL_GUID+" in (?)", ids)
.mapToList(newFunc1() {...})...
```
而我的ids=’1001’, '1002', '1003' ...; 感觉应该没问题,运行一试,果然我的感觉每次都不靠谱;为啥不行了,我也没有找到很官方的解释,但发现一个方法可以解决:
将 in(?) 改为 "in (" + makePlaceholders( idArray.length)+ "), ids改为idArray数组。
```
private String makePlaceholders(intlen) {
if(len <1) {
// It will lead to an invalid query anyway ..
throw newRuntimeException("No placeholders");
}else{
StringBuilder sb =newStringBuilder(len *2-1);
sb.append("?");
for(inti =1;i < len;i++) {
sb.append(",?");
}
returnsb.toString();
}
}
```
SqlBrite是什么鬼?
简单的说就是将SQLite数据库用Rxjava进行了封装,用于结合Rxjava使用,以下是简要介绍和下载地址:
那Rxjava又是什么东东?
只能说你太out了,这么强大的一个东西,你居然不知道,赶紧挖个坑把自己埋了吧~!~!
(ps: 其实我只想记录以下,以免以后忘了》_《)废话不多说了,自己领悟去吧~!
网友评论