私はQueryBuilderを使用して、無効な文字を手動でエスケープしないようにするために、後で生のSQLで使用される内部SQLを構築しています。
SelectArg friendsIN = new SelectArg(friendsUsernames);
QueryBuilder<MyObject, Integer> qb = myObjectDao.queryBuilder();
qb.selectRaw("username", "MAX(time) AS latestTime").groupBy("username").where()
.in("username", friendsIN);
String innerSelect = pq.getStatement();
friendsUsernames
として定義されArrayList<String>
ます。
次に、を使用しinnerSelect
て外部選択を作成します。
String select = "SELECT w.id FROM (" + innerSelect +") AS x INNER JOIN myObject AS w on w.username = x.username AND w.time = x.latestTime";
GenericRawResults<String[]> results = myObjectDao.queryRaw(select);
しかし、予想通り、私innerString
が'?'
電話をかけたとき、私queryRaw
はmyObjectDao
何の結果も得られませんでした。queryRawの配列としてfriendsUsernameを指定しようとしました。
GenericRawResults<String[]> results =
myObjectrDao.queryRaw(select,
friendsUsernames.toArray(new String[friendsUsernames.size()]));
しかし、次のエラーが発生します。
android.database.sqlite.SQLiteBindOrColumnIndexOutOfRangeException:
bind or column index out of range: handle 0x17a22e8
OrmLiteを使用してこの種のクエリを実行する方法に関する提案はありますか?