2011-02-07 4 views
1

J'ai suivi les instructions données here pour introduire une base de données SQLite existante dans votre application Android.La table SQLite n'existe pas Exception pour la base de données SQLite existante (et la table)

Lorsque j'interroge la table "android_metadata", c'est correct. Mais quand j'exécute une requête similaire sur ma propre table "mots" (qui a _id pour la clef entière primaire) je reçois une table n'existent pas l'exception et l'application plante.

Pourquoi est-ce?

code:

Cursor c = myDatabase.query("android_metadata", null, null, null, null, null, null, null); 

œuvres, mais

Cursor c = myDatabase.query("words", null, null, null, null, null, null, null); 

retourne une table n'existe pas exception.

Voici comment je crée la base de données (les références aux chemins et noms de fichiers sont corrects):

private void copyDatabase() throws IOException 
{ 
    //Open local db as the input stream 
    InputStream myInput = mContext.getAssets().open(DB_NAME); 

    //Path to the just created empty db 
    String outFileName = DB_PATH + DB_NAME; 

    //Open the empty db as the output stream 
    OutputStream myOutput = new FileOutputStream(outFileName); 

    //Transfer bytes from the inputfile to the outputfile 
    byte[] buffer = new byte[1024]; 
    int length = 0; 
    while ((length = myInput.read(buffer))>0){ 
     myOutput.write(buffer, 0, length); 
    } 

    //Close the streams 
    myOutput.flush(); 
    myOutput.close(); 
    myInput.close(); 
} 

(Note: à mes yeux, la table est là, je suis à la recherche à droite il. dans mon navigateur SQLite.)

+0

personne ne va être en mesure de répondre sans un code ... – tobyodavies

+0

ce n'est pas un problème de codage - si je peux trouver une table et pas une autre, c'est un problème avec la façon dont la base de données sqlite a été modifiée pour convenir à android. Je suis sûr que quelqu'un doit avoir rencontré ce .... – SK9

+0

pour plus de code, voir le lien "ici" j'ai joint. c'est plutôt un truc d'aide SQLiteDatabase standard. – SK9

Répondre

3

Vous suivez un hareng rouge. La table android_metadata est créée dans chaque base de données Android, quoi qu'il arrive. Le véritable mécanisme permettant de déterminer votre problème consiste simplement à exécuter votre application dans l'émulateur et à extraire la base de données. Si votre émulateur est en cours d'exécution et l'application a la configuration de la base de données, exécutez:

adb shell 
cd /data/data/your.application.package/databases 
ls 

si ls indique le nom de la base de données que vous attendez, exécutez:

sqlite3 <your db file> 

à l'promptrun sqlite3: .schema

Cela affichera les tables des bases de données. Je suppose que vous ne trouverez que la table de méta-données car Android ne lit pas réellement votre base de données à partir de votre emplacement externe. Si c'est le cas, faites un commentaire et je peux essayer de vous aider à travers ce processus.

+0

peut-être que c'est ce que vous vouliez dire quand vous avez dit '(Note: À mes yeux, la table est là, je la regarde dans mon navigateur SQLite.)', Si oui, je vais supprimer cette réponse. C'est le mécanisme définitif cependant. –

+0

Vous êtes sur. Cela m'a aidé à le réduire. – SK9

+0

OK - vous avez raison sur le hareng rouge. Parce que la table "android_metadata" est créée par défaut, et parce que je l'avais ajouté à ma propre base de données en fonction d'Android, je pensais que c'était trouvé. Par conséquent, j'avais l'impression erronée que copyDatabase était appelé et que mon fichier de base de données avait été chargé. Au contraire, copyDatabase n'était pas du tout appelé et le fait de voir cela efface le problème. J'aurais mieux fait de le coder moi-même dès le début - leçon à moi-même: ne faites pas trop confiance au code disponible publiquement, je déconseille d'utiliser le code lié à ma question. – SK9

0

Vous pouvez essayer de créer votre base de données à la place avec SQLiteHelpter. Il vérifie s'il en existe un et sinon il en crée un, sans effort supplémentaire pour vous.

Je postais déjà un exemple sur d'autres questions, vérifier ici:
Android - Sqlite database method undefined fot type

Hope this helps :)

+0

Merci pour votre aide. Ma base de données est un actif en lecture seule. J'ai déjà réussi à créer des bases de données à partir de nouveaux, c'est un problème différent. – SK9

Questions connexes