Android 内容解析器查询占位符整数

Android content resolver query placeholder integer

我正在尝试 运行 在 android 浏览器内容提供程序上进行简单查询。书签与历史项目混合在一起,所以要获得书签只需要 select "Browser.BookmarkColumns.BOOKMARK = 1"。使用

String mSelectionClause = Browser.BookmarkColumns.BOOKMARK + " = 1";

Cursor cursor = getContentResolver().query(Browser.BOOKMARKS_URI, null, mSelectionClause, null, null);

工作正常。但是我用占位符获得相同结果的所有尝试都失败了:

String mSelectionClause = Browser.BookmarkColumns.BOOKMARK + " = ?";

查询:

Cursor cursor = getContentResolver().query(Browser.BOOKMARKS_URI, null, mSelectionClause, mSelectinArgs, null);

returns 在所有这些情况下都是空 Cursor:

mSelectionArgs[0] = "1"
mSelectionArgs[0] = '1'
mSelectionArgs[0] = String.valueOf(1)
mSelectionArgs[0] = Integer.toString(1)
mSelectionArgs[0] = 1 + "" (idea picked up on this site)

我是做错了什么还是应该放弃使用占位符的希望?

干杯。

Android 数据库 API 是为字符串而不是整数设计的。有人说是API.

的设计错误

无论如何,在您的示例中 String mSelectionClause = Browser.BookmarkColumns.BOOKMARK + " = 1"; 您使用的是整数 (= 1)。这是处理整数的最好也是唯一的方法。这样做也是安全的。如果你要使用字符串,你的第二个解决方案将是最安全的。