android
  • sqlite
  • 2012-03-03 29 views 2 likes 
    2

    我發送bytearray插入一個blob元素它插入爲PNG圖像它工作。但我想刪除blob元素爲這些我發送bytearray列但它不會刪除。如何從sqlite android中的表中刪除blob元素?

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

    嘗試調整列值和您的參數值。 – Android 2012-03-03 05:03:42

    +0

    sai是ketan回答工作??? – 2012-03-22 13:13:17

    回答

    0

    你可以試試這個

    database.execSQL("DELETE FROM deleteImage WHERE image=\""+bytearray+"\" ;") 
    
    or 
    
    mDb.delete(deleteImage,"image=\""+bytearray+"\"", null); 
    
    mDb.delete(deleteImage,"image = '"+bytearray+"'", null); 
    
    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查詢它會更好,因爲它不是那麼高效。您可以嘗試以某種方式識別圖像,例如使用圖像數據散列進行搜索。

    0

    試試這個(這爲我的作品):

    UUID存儲爲BLOB

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

    文檔:SQLiteDatabase execSQL

    根據文檔,byte [],在bindArgs中支持String,Long和Double。但是,推薦使用而不是來執行SELECT/INSERT/UPDATE/DELETE語句。我不知道爲什麼。

    public void execSQL (String sql, Object[] bindArgs) 
    
    相關問題