如何从sqlite android中的表中删除blob元素?

时间:2012-03-03 04:57:11

标签: android sqlite

我发送bytearray插入一个blob元素,它插入png图像它正在工作。但我想删除这些blob元素我发送bytearray到列但不删除。

public void deleteImage(Byte[] bytearray)
 {
  try{
   database.execSQL("DELETE FROM deleteImage "+" where image='"+bytearray+"';");
  }
  catch(Exception e){
   e.toString();
  }
  }

3 个答案:

答案 0 :(得分:0)

你可以尝试这个

  database.execSQL("DELETE FROM deleteImage WHERE image=\""+bytearray+"\" ;")

or 

mDb.delete(deleteImage,"image=\""+bytearray+"\"", null);

mDb.delete(deleteImage,"image = '"+bytearray+"'", null);

答案 1 :(得分:0)

我和你有同样的问题。我设法找到了在where子句中使用blob查询的解决方案,但没有找到删除。所以最后我的解决方案是首先查询我要删除的行,然后使用行ID删除它。这是代码示例。我假设你有一个名为ImageId的列作为int类型的主键。

    public Cursor queryImage(final byte[] data, String[] columns) {
    return getReadableDatabase().queryWithFactory(
            new CursorFactory() {

                @Override
                public Cursor newCursor(SQLiteDatabase db, SQLiteCursorDriver masterQuery, String editTable, SQLiteQuery query) {
                    query.bindBlob(1, data);
                    return new SQLiteCursor(db, masterQuery, editTable, query);
                }
            },
            false,
            "FavoriteData",
            columns,
            "Image = ?", null, null, null, null, null);
}

public void favoriteDelete(byte[] byteArray){
    Cursor cursor = queryImage(byteArray, new String[]{"ImageId"});
    while (cursor.moveToNext()) {
        getReadableDatabase().delete("FavoriteData",
                "ImageId" + "= ?",
                new String[] { String.valueOf(cursor.getInt(0))});
    }
}

如果有人有更好的解决方案,我也会感兴趣。无论如何,如果你有任何方法可以避免使用Blob来查询它会更好,因为它不是那么有效。您可以尝试以某种方式识别图像,例如使用图像数据哈希进行搜索。

答案 2 :(得分:0)

尝试这个(它适用于我):

UUID存储为BLOB

db.execSQL("DELETE FROM "+DBHelper.USER_TABLE+" WHERE "+DBHelper.USER_UUID+"=?",
            new Object [] { uuidToByteArray(user.getUuid()) }

文档:SQLiteDatabase execSQL

根据文档,bindArgs支持 byte [] ,String,Long和Double。但是,建议使用此方法执行SELECT / INSERT / UPDATE / DELETE语句。我不知道为什么。

public void execSQL (String sql, Object[] bindArgs)