SQLiteDatabaseの1481行目の
public Cursor query(String table, String[] columns, String selection,
String[] selectionArgs, String groupBy, String having,
String orderBy) {
return query(false, table, columns, selection, selectionArgs, groupBy,
having, orderBy, null /* limit */);
}
あ、nullなんすか。そーすか。
前の記事でSQLはStringBuilderでappendして作られることがわかったから、
無理やりどっかにつけようと思えばできる。
できるけどもやらないほうがいいかもしれない。
不勉強だったので、queryの引数が違うものがあることを知らなかった汗
distinctやlimitを使いたい場合は、同じqueryメソッドの引数が違うタイプのものがあるので、
そちらを使いましょう。
前の記事でSQLはStringBuilderでappendして作られることがわかったから、
無理やりどっかにつけようと思えばできる。
できるけどもやらないほうがいいかもしれない。
不勉強だったので、queryの引数が違うものがあることを知らなかった汗
distinctやlimitを使いたい場合は、同じqueryメソッドの引数が違うタイプのものがあるので、
そちらを使いましょう。
start
↓
db.query(String table, String[] columns, String selection,
String[] selectionArgs, String groupBy, String having,
String orderBy)
↓
query・・・引数はそのまま。ここでdistinctはfalse指定。Limitはnull指定。
↓
query・・・引数にdistinctのbooleanとLimit句のStringがある。
↓
rawQueryWithFactory
↓
end
ちなみにrawquery()だとすぐrawQueryWithFactoryに行く。
で、rawQueryWithFactoryで
public Cursor rawQueryWithFactory(
CursorFactory cursorFactory, String sql, String[] selectionArgs,
String editTable) {
verifyDbIsOpen();
BlockGuard.getThreadPolicy().onReadFromDisk();
SQLiteDatabase db = getDbConnection(sql);
SQLiteCursorDriver driver = new SQLiteDirectCursorDriver(db, sql, editTable);
Cursor cursor = null;
try {
cursor = driver.query(
cursorFactory != null ? cursorFactory : mFactory,
selectionArgs);
} finally {
releaseDbConnection(db);
}
return cursor;
}
driver.queryの引数内の判定で、引数の違うタイプを使っている。
これはこれで便利だけど、書き方としてはちょっと。。。
流儀だと思うので不問ということで。
これはこれで便利だけど、書き方としてはちょっと。。。
流儀だと思うので不問ということで。
んー。
ここのフィールドの値はUNIQUEですよってのがわかれば、Limit判定ができるってことかな。
0 件のコメント:
コメントを投稿