/ / Android android.database.sqlite.SQLiteException: nie je možné otvoriť databázový súbor - android, sqlite, google-analytics

Android android.database.sqlite.SQLiteException: nemožno otvoriť databázový súbor - android, sqlite, google-analytics

V mojej aplikácii pre Android existujú dva procesy, povedzme proces A a B

Je zábavné, že ak sa proces A pokúša získať prístup k databáze sqlite, všetko je v poriadku. Ak to však proces B urobí, zobrazí sa nasledujúca výnimka

android.database.sqlite.SQLiteException: nemôže otvoriť súbor databázy: ZAČIATOK EXKLUZÍVNE;

FYI, vlastne nie moja aplikácia sa pokúša použiť databázu SQLite. Namiesto toho používam službu Google Analytics na sledovanie používateľov a používa databázu SQLite.

Prečo sa to stalo? Ďakujem.

odpovede:

2 pre odpoveď č. 1

To, čo skutočne používate, je Transaction.a keď prebieha transakcia, žiadny iný proces nemá prístup k databáze.

Myslím si, že preto získavate túto výnimku

Niekedy sa to stane

  1. kedy beginTransaction sa volá pri neotvorenom pripojení k databáze.
  2. keď príkazy SQL obsahujú chyby syntaxe

2 pre odpoveď č. 2
  • Musíš close pripojenie k databáze postup A najskôr predtým, ako začnete používať databázu s postup B.
  • Toto vyrieši vaše concurrency.
  • používame db.close();

Dúfam, že to môže byť váš problém.


1 pre odpoveď č. 3

ak sa proces A pokúsi získať prístup k databáze sqlite, je všetko v poriadku. Ak to však proces B urobí, zobrazí sa nasledujúca výnimka

Sqlite otvorí databázy iba z adresára databáz vašich aplikácií.

DB_PATH = "/data/data/"+ context.getPackageName() + "/databases/";

Vo vašom prípade je databáza v adresári procesu A, aby k nej mala prístup. Ale proces B nemôže čítať databázu z adresára procesu A.

Čo môžete urobiť, je skopírovať tento databázový súbor do adresára procesu B zadaním vyššie uvedenej cesty.