我正在尝试在android浏览器内容提供程序上运行一个简单的查询.书签与历史记录项混合在一起,因此要获取书签,只需选择“ 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);
在所有这些情况下,返回一个空的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设计中的错误.
无论如何,在您的示例字符串mSelectionClause = Browser.BookmarkColumns.BOOKMARK“ = 1”;您使用的是整数(= 1).这是处理整数的最佳且唯一的方法.这样做也是安全的.如果要使用字符串,则第二种解决方案将是最安全的.