0

我有一个非常基本的内容提供程序,它在 sqlite 数据库中存储 4 列。这些列是一个自动递增的键、一个作为文本的 url、一个 long 和一个用于图像的 blob。当我尝试查询 url 时,我没有得到任何结果,即使我知道该行存在于数据库中。为了让选择拉它,我需要对 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();
    }
}
4

1 回答 1

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);
于 2012-12-06T17:33:43.653 回答