我有一个非常基本的内容提供程序,它在sqlite数据库中存储4列。这些列是一个自动递增键,一个url作为文本,一个long和一个blob用于图像。当我尝试查询网址时,我得不到任何结果,即使我知道数据库中存在该行。我需要对url做什么才能让选择拉到它。
//called when storing
private void addKey(String url, final Bitmap bm) {
ContentValues values = new ContentValues();
values.put(ImagesContentProvider.URL, "'" + url + "'");
values.put(ImagesContentProvider.TIME, System.currentTimeMillis());
ByteArrayOutputStream bos = new ByteArrayOutputStream();
bm.compress(CompressFormat.PNG, 0 /* ignored for PNG */, bos);
values.put(ImagesContentProvider.BITMAP, bos.toByteArray());
cr.insert(ImagesContentProvider.CONTENT_URI, values); //cr is content resolver
}
//called for querying
private void query(String url) {
String selection = ImagesContentProvider.URL + "='" + url+ "'";
Cursor resultsCursor = cr.query(ImagesContentProvider.CONTENT_URI,
null, selection, null, null);
if (!resultsCursor.moveToFirst()) {
Log.d(TAG, "Not found in DB");
resultsCursor.close();
} else {
Log.e(TAG, "found in DB");
resultsCursor.close();
}
}
答案 0 :(得分:0)
我知道你已经知道了答案,但...... 错误在这里
values.put(ImagesContentProvider.URL, "'" + url + "'");
这应该是:
values.put(ImagesContentProvider.URL, url);
//or you should add ' when you do query
ContentValues中不必要的转义字符串......
防止此类错误不会自行转义字符串...使用参数化查询
Cursor resultsCursor = cr.query(ImagesContentProvider.CONTENT_URI,
null, ImagesContentProvider.URL + "=?", new String[] { url }, null);