2013-11-20 134 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);