選択文字列に値を追加するのは、セキュリティ上の理由から悪い習慣です。たとえば:Android上のSQLiteQueryBuilderが置き換え可能なパラメータをサポートしないのはなぜですか?
String selection = TableColumOne + " = " + whereValue;
と、次は私が先に行くと最初に行いSQLiteQueryBuilder
を使用し見てきました
String selection = TableColumOne + " = ?"
String[] selectionArgs = new String[] { whereValue}
すべてのコンテンツプロバイダの例をお勧めします。これは悪い習慣ではありません
public Cursor query(Uri uri, String[] projection, String selection, String[] selectionArgs,
String sortOrder) {
SQLiteQueryBuilder qb = new SQLiteQueryBuilder();
qb.setTables(NOTES_TABLE_NAME);
switch (sUriMatcher.match(uri)) {
case NOTE_ID:
qb.setProjectionMap(sNotesProjectionMap);
qb.appendWhere(NoteColumns._ID + "=" + uri.getPathSegments().get(1));
break;
}
// If no sort order is specified use the default
String orderBy;
if (TextUtils.isEmpty(sortOrder)) {
orderBy = NoteColumns.DEFAULT_SORT_ORDER;
} else {
orderBy = sortOrder;
}
// Get the database and run the query
SQLiteDatabase db = mOpenHelper.getReadableDatabase();
Cursor c = qb.query(db, projection, selection, selectionArgs, null, null, orderBy);
// Tell the cursor what uri to watch, so it knows when its source data changes
c.setNotificationUri(getContext().getContentResolver(), uri);
return c;
}