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ď č. 1To, č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
- kedy
beginTransaction
sa volá pri neotvorenom pripojení k databáze. - 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.