SQLite
 sql >> Baza danych >  >> RDS >> SQLite

SQLiteReadOnlyDatabaseException:próba napisania bazy danych tylko do odczytu (kod 1032)

Utknąłem z mniej więcej tym samym problemem i znalazłem otwartą wadę w tej sprawie, która ma sens...

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

Moje obejście - choć nie jest to najlepsze rozwiązanie - polega na tym, aby nigdy nie przechodzić wersji bazy danych i samodzielnie tego śledzić, dzięki czemu nigdy nie wywoływać funkcji onUpgrade() i ręcznie wykonaj aktualizację podczas aktualizacji aplikacji.

Alternatywnie, jeśli masz małą bazę danych, która jest tylko do odczytu, możesz wywołać kopię bazy danych w zasobach przy każdym onCreate() w DBHelper klasy, ale może to spowodować niepożądane problemy, jeśli system plików jest pełny, więc rób to tylko podczas szukania lepszego rozwiązania.

@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());
    }
}

Moja aplikacja aktualizuje się teraz tak, jak powinna, dzięki mojemu obejściu i oceniając, ile czasu minęło, odkąd ta usterka została pierwotnie zgłoszona, może nigdy nie zostać naprawiona...

Przykro mi, że to nie jest pełne rozwiązanie problemu, ale przynajmniej jest to droga naprzód.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Wybierz wyróżniający SQLite

  2. aktualizowanie i kompaktowanie bazy danych sqlite w systemie Android

  3. Jak odczytać numer wersji z pliku bazy danych w systemie Android, który jest umieszczony w folderze zasobów

  4. Jak pobrać dwie odpowiedzi Json Json Object i Array

  5. Eksportuj całą bazę danych SQLite do pliku SQL