32 votes

Puis-je télécharger une base de données SQLite sur / sdcard et y accéder depuis mon application Android?

J'ai déjà constaté qu'il n'existe aucun moyen de regrouper les fichiers dans un .apk et les avoir sur /sdcard, la meilleure option si loin pour télécharger les fichiers de grande taille lors de la première exécution. Je suis tombé sur un tutoriel expliquant comment pour intégrer une db sqlite avec l'apk et puis copiez-le de sorte qu'il peut être consulté avec SQLiteDatabase (ce qui permet de doubler l'espace nécessaire, et non pas à l'aide de /sdcard à tous).

http://developer.android.com/guide/topics/data/data-storage.html#db explique toutes les bases de données DOIVENT être dans /data/data/nom_du_paquet/bases de données.

Est-ce vraiment ainsi? Est-il un moyen de tromper le cadre de l'ouverture d'une base de données qui est placé sur l' /sdcard partition? Est-il possible d'utiliser un autre SQLite wrapper java/cadre pour accéder à ces bases de données?

Si la réponse à la ci-dessus est "Non", ce que d'autres options s'offrent à moi? Mes données sont très bien représentés dans un modèle relationnel, mais est tout simplement trop grand, de plus, je veux être en mesure de le mettre à jour sans avoir besoin de réinstaller/mettre à niveau l'ensemble de l'application.

44voto

AdamC Points 5828

Sûr que vous pouvez. Les documents sont un peu contradictoires à ce sujet car ils disent également qu'aucune limitation n'est imposée. Je pense qu'ils devraient dire que les chemins relatifs sont à l'emplacement ci-dessus et les dbs sont privés. Voici le code que vous souhaitez:

 File dbfile = new File("/sdcard/mydb.sqlite" ); 
SQLiteDatabase db = SQLiteDatabase.openOrCreateDatabase(dbfile, null);
System.out.println("Its open? "  + db.isOpen());
 

7voto

Iwan Points 51

Essaye ça:

 String dir = Environment.getExternalStorageDirectory().getPath()
File dbfile = new File(dir+"/mydb.sqlite"); 
SQLiteDatabase db = SQLiteDatabase.openOrCreateDatabase(dbfile, null);
System.out.println("Its open? "  + db.isOpen());
 

1voto

Barna Points 53

Juste une idée:

  • vous pouvez placer votre database.db dans le dossier des ressources.

  • si votre fichier database.db est supérieur à 2 Mo, le système ne peut pas le compresser, vous avez donc besoin d'autres options

  • vous pouvez renommer votre database.db par exemple database.jit ou database.mp3 - qui ne sont pas compressés, qu'à la première exécution vous pouvez le renommer en database.db

1voto

Rabih harb Points 996

1voto

Sergio Points 1

Je partage le code suivant. Déclarer les opcionesMenu Vector

 Vector < String > opcionesMenu = new Vector< String >();
// the database is SDCard. I saw  the code to Blackberry (net.rim)
String rutaDB = "/storage/extSdCard/Android/databases/Offshore.db";


    SQLiteDatabase db = SQLiteDatabase.openOrCreateDatabase(rutaDB, null);

    Cursor cursor = db.rawQuery("SELECT Codigo, Nombre FROM Ruta ORDER BY Codigo, Nombre", null);

    if (cursor.moveToFirst())
    {
        do
        {
            opcionesMenu.add(cursor.getString(0) + " - " + cursor.getString(1));
        } while(cursor.moveToNext());
    }

    db.close();
 

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X