2013-11-20 163 views
-1

我是SQL新手,請耐心等待。Android內容提供商獨特查詢

我有一個數據庫存儲圖像的元數據。當查看圖像時,意圖是從數據庫中提取元數據。要查詢圖像,我有一個URI列。但是我看到崩潰時用戶可以在他們的文件路徑像這樣的撇號:

android.database.sqlite.SQLiteException: near "s": syntax error (code 1): , while compiling: SELECT * FROM meta WHERE (uri='file:///mnt/sdcard/Android/data/com.dropbox.android/files/scratch/Sandra's%20pictures/Sandstone%20no%203%20ED01.tif') 

查詢是:

Cursor meta = mContext.getContentResolver().query(Meta.Data.CONTENT_URI, null, Meta.Data.URI + "='" + getUri() + "'", null, null); 

這對我來說很有意義在「桑德拉的」即撇號終止URI字符串,但我不知道如何解決這個問題。有沒有更好的方法來查詢單個條目?

回答

1

感謝的Gaetan指着我在正確的方向。在挖掘到DatabaseUtils.sqlEscapeString後,我發現它使用的是DatabaseUtils.appendEscapedSQLString,在大多數情況下(包括這一個)已棄用。

此方法已被棄用,因爲我們希望鼓勵大家使用「?」綁定形式。

插入URI是使用所述selectionArgs兩個參數等,例如優選的方式:

String[] selection = new String[]{ getUri().toString() }; 
Cursor meta = mContext.getContentResolver().query(Meta.Data.CONTENT_URI, null, Meta.Data.URI + "=?", selection, null); 
1

你應該逃避字符串,嘗試使用:

Cursor meta = mContext.getContentResolver().query(Meta.Data.CONTENT_URI, null, Meta.Data.URI + "=" + DatabaseUtils.sqlEscapeString(getUri()), null, null);