我发送bytearray插入一个blob元素,它插入png图像它正在工作。但我想删除这些blob元素我发送bytearray到列但不删除。
public void deleteImage(Byte[] bytearray)
{
try{
database.execSQL("DELETE FROM deleteImage "+" where image='"+bytearray+"';");
}
catch(Exception e){
e.toString();
}
}
答案 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()) }
根据文档,bindArgs支持 byte [] ,String,Long和Double。但是,建议不使用此方法执行SELECT / INSERT / UPDATE / DELETE语句。我不知道为什么。
public void execSQL (String sql, Object[] bindArgs)