0

sqlite db に 4 つの列を格納するかなり基本的なコンテンツ プロバイダーがあります。これらの列は、自動インクリメント キー、テキストとしての URL、long、および画像の blob です。URL からクエリを実行しようとすると、データベースに行が存在することを知っていても、結果が得られません。選択した 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 に答える