2012-03-03 3 views
2

Я отправляю bytearray, чтобы вставить элемент blob, который он вставляет как png-образ, он работает. Но я хочу удалить элемент blob для них, я отправляю bytearray в столбец, но не удаляет.Как удалить элемент blob из таблицы в sqlite android?

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

попытка Обрезать значение столбца и значение вашего аргумента. – Android

+0

sai is ketan answer working ??? –

ответ

0

вы можете попробовать это один

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

or 

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

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

Я была такая же проблема, как и вы. Мне удалось найти решение для запроса с blob в предложении where, но не для удаления. Поэтому в конце мое решение было первым, чтобы запросить строки, которые я хочу удалить, и использовать идентификатор строки, чтобы удалить его. Вот пример кода. Я предполагаю, что у вас есть столбец с именем 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 для запроса, это будет лучше, потому что это не так эффективно. Вы можете попытаться идентифицировать изображения каким-то образом, например, используя хэш-данные изображения для поиска.

0

Попробуйте это (Это работает для меня):

UUID хранится в виде BLOB

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

Документация: SQLiteDatabase execSQL.

Согласно документации, byte [], String, Long и Double поддерживаются в bindArgs. Тем не менее, это не рекомендуется использовать этот метод для выполнения операторов SELECT/INSERT/UPDATE/DELETE. Я не знаю почему.

public void execSQL (String sql, Object[] bindArgs) 
Смежные вопросы