2010-03-27 12 views
53

sto copiando un database pre-esistente per /data/data/packagename/databases utilizzando il codice appreso da using-your-own-sqlite-database-in-android-applicationsNon esiste una tale tabella android_metadata, qual è il problema?

Dopo la copia, ricevo il seguente messaggio di registro all'apertura del database:

Nessuna tale tabella android_metadata

mi devo creare una tabella denominata android_metadata? E quali sono i valori ho bisogno inserire in questa tabella di database

Grazie molto

+3

Se questo viene risolto prego di accettare la risposta corretta in modo che esso non è più contrassegnato come risposta. – Merlin

risposta

2

Sono già usando come dato in quel collegamento per molto tempo ..

Funziona .. checkout nuovamente il DB la tabella creata o no?

preferisco installare plugin di SQLite Manager in Firefox per il funzionamento del database SQLite .. dopo aver completato tutto il processo, come indicato nel link stesso ..

Checkout http://www.devx.com/wireless/Article/40842/1954.

Contiene tutte le operazioni del database.

107

In realtà, con un po 'più leggere, ho scoperto che ho bisogno di utilizzare il flag SQLiteDatabase.NO_LOCALIZED_COLLATORS quando si chiama SQLiteDatabase.openDatabase() - questo non è più causa il problema.

+0

SQLiteDatabase.NO_LOCALIZED_COLLATORS ha risolto per me! Grazie. –

+0

Questo suggerimento mi fa risparmiare la testa. Molte grazie. –

+2

+1 per ottima risposta ........ Grazie! –

4

Sembra che per qualche ragione Android richieda che ogni database abbia una tabella chiamata android_metadata che include almeno una locale. Il blog reigndesign che hai menzionato ti dice come creare la tabella e pre-riempirla con una locale.

Verificare se il database contiene questa tabella e se la tabella ha del contenuto.

2

Quando si copia il database dalla directory delle risorse, ad esempio, è necessario avere già creato la tabella android_metadata. Questa tabella dovrebbe avere due colonne:

_id = an integer value 
locale = en 
1

Nel mio caso, ho scoperto che questo errore accadrà se lascio un open transaction sinistra.

In altre parole: se si dimentica di commit o rollback una transazione, la volta successiva che si inserisce l'applicazione, questo errore aumenta.

2

potrebbe anche essere solo autorizzazioni file - il messaggio di errore è fuorviante. prima bisogna scoprire l'id utente dell'app (questo è supponendo di avere accesso root):

$ adb shell grep <packagename> /data/system/packages.xml 

output dovrebbe assomigliare:

<package name="com.fsck.k9" codePath="/data/app/com.fsck.k9-1.apk" 
nativeLibraryPath="/data/data/com.fsck.k9/lib" 
flags="0" ft="1306ecac340" it="1306ecac9d2" ut="1306ecac9d2" 
version="14001" userId="10002"> 

userId qui è 10002.

poi fissare permesso:

$ adb shell chown -R 10002:10002 /data/data/<packagename> 
30

Utilizzare

SQLiteDatabase.openDatabase(dbPath, null,SQLiteDatabase.NO_LOCALIZED_COLLATORS | SQLiteDatabase.CREATE_IF_NECESSARY); 

o

SQLiteDatabase.openDatabase(dbPath, null,SQLiteDatabase.OPEN_READWRITE); 
+2

Davvero semplice è proprio questo. Basta aggiungere il permesso di scrittura al database e Android aggiungerà automaticamente questa tabella. – Derzu

+0

Posso usarlo anche con READ_ONLY? – Siddharth

Problemi correlati