Android技术知识Android开发

SqlBrite where in 语句无效问题

2016-11-17  本文已影响93人  IOTYang

最近在使用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使用,以下是简要介绍和下载地址:

GitHub - square/sqlbrite: A lightweight wrapper around SQLiteOpenHelper which introduces reactive stream semantics to SQL operations.

那Rxjava又是什么东东?

只能说你太out了,这么强大的一个东西,你居然不知道,赶紧挖个坑把自己埋了吧~!~!

github.com/ReactiveX/RxJava

给 Android 开发者的 RxJava 详解

(ps: 其实我只想记录以下,以免以后忘了》_《)废话不多说了,自己领悟去吧~!

上一篇 下一篇

猜你喜欢

热点阅读