查询内容提供程序的url不会返回任何结果

时间:2012-12-06 17:08:13

标签: android sqlite

我有一个非常基本的内容提供程序,它在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();
    }
}

1 个答案:

答案 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);