sql >> Databáze >  >> RDS >> SQLite

SQLiteReadOnlyDatabaseException:pokus o zápis databáze pouze pro čtení (kód 1032)

Uvízl jsem u víceméně přesně stejného problému a našel jsem v této záležitosti otevřený defekt, který dává smysl...

https://code.google.com/p/android/issues/detail?id=174566

Moje řešení - i když to není nejlepší řešení - je nikdy nekrokovat revizi databáze a nesledovat to sám, takže nikdy nevolat onUpgrade() a ručně provést upgrade při aktualizaci aplikace.

Alternativně, pokud máte malou databázi, která je pouze pro čtení, můžete spustit kopii databáze v aktivech na každém onCreate() v DBHelper class, ale to může způsobit nechtěné problémy, pokud je souborový systém plný, takže to udělejte pouze při hledání lepšího řešení.

@Override
public void onCreate(SQLiteDatabase db) {
    // Workaround for Issue 174566
    myContext.deleteDatabase(DB_NAME);
    try {
        copyDataBase();
    }
    catch(IOException e) {
        System.out.println("IOException " + e.getLocalizedMessage());
    }
}

Moje aplikace se nyní upgraduje tak, jak by měla, s mým řešením a podle posouzení, jak dlouho uplynula od doby, kdy byla tato vada původně nahlášena, nemusí být nikdy opravena...

Je mi líto, že to není úplné řešení problému, ale je to přinejmenším cesta vpřed.



  1. Datum a čas Místní nastavení Dostupné v MariaDB

  2. Jak funguje funkce RPAD() v MySQL

  3. Standardizace zabezpečení PostgreSQL napříč prostředími s více cloudy

  4. Databáze se neaktualizuje automaticky pomocí MySQL a Pythonu