Как удалить элемент BLOB из таблицы в SQLite Android? - PullRequest
2 голосов
/ 03 марта 2012

Я отправляю 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 голосов
/ 23 мая 2012

У меня была такая же проблема, как и у вас. Мне удалось найти решение для запроса с 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 голосов
/ 14 декабря 2014

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

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)
0 голосов
/ 22 марта 2012

Вы можете попробовать это

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

or 

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

mDb.delete(deleteImage,"image = '"+bytearray+"'", null);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...