この質問は、Android で SQLite が始まって以来、私を悩ませてきました。選択引数はStrings
. 何?なんで?
私の問題を見てみましょう。データベースが適切に入力されました:
sqlite> select count (*) from issues where project_id = 1;
3819
偉大な。コードを見てみましょう。
public Cursor selectAllCursor(final long projectId) {
final String selection = projectId > 0 ? KEY_PROJECT + " = ?" : null;
final String[] selArgs = projectId > 0 ? new String[] {
Long.toString(projectId)
} : null;
final Cursor c = mDb.query(TABLE_ISSUES, null, selection, selArgs, null, null, null);
c.moveToFirst();
return c;
}
さて、返されたCursor
ものは空です。なんで?
sqlite> select count (*) from issues where project_id = '1';
0
まあ、それが理由です。
私が見つけた唯一の修正は次のとおりです。
public Cursor selectAllCursor(final long projectId) {
final String selection = projectId > 0 ? KEY_PROJECT + " = " + projectId : null;
final String[] selArgs = null;
final Cursor c = mDb.query(TABLE_ISSUES, null, selection, selArgs, null, null, null);
c.moveToFirst();
return c;
}
動作しますが、これは醜いと思います。選択引数がではなく の
配列ではないのはなぜですか? Android フレームワークはオブジェクト タイプをテストし、それが整数 ( / ) の場合は、これを整数として扱うように SQLite に指示します。Object
String
int
long