2013-11-20 2 views
-1

Я новичок в SQL, так что медведь со мной.Android ContentProvider Уникальные запросы

У меня есть база данных, хранящая метаданные для изображений. Когда изображение просматривается, цель состоит в том, чтобы вытащить метаданные из базы данных. Для запроса изображений у меня есть столбец URI. Однако я вижу аварии, когда пользователи имеют апостроф в их FilePath, как например:

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

Это имеет смысл для меня, что апостроф в «Сандра» завершает Ури string, но я не уверен, как исправить это. Есть ли лучший способ запросить отдельные записи?

ответ

1

Благодаря Gaétan указал мне в правильном направлении. После копания в DatabaseUtils.sqlEscapeString я обнаружил, что он использует DatabaseUtils.appendEscapedSQLString, который устарел в большинстве случаев (включая этот).

Этот метод устарел, потому что мы хотим побудить всех использовать «?» обязательная форма.

Предпочтительный способ вставки УИР будет использовать параметр 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); 
Смежные вопросы