Base de données SQLite sur carte SD
Je cherche à créer une base de données sqlite sur la carte sd (ne souhaitez pas utiliser de l'utilisateur un espace de stockage interne). Je suis familier avec les OpenHelper modèle:
public DatabaseFoo(Context context) {
OpenHelper openHelper = new OpenHelper(context);
mDb = openHelper.getWritableDatabase();
}
private static class OpenHelper extends SQLiteOpenHelper {
public OpenHelper(Context context) {
super(context, DATABASE_NAME, null, DATABASE_VERSION);
}
...
donc, si nous voulons créer sur la carte sd, je pense, au contraire, nous devons utiliser:
public static SQLiteDatabase openOrCreateDatabase (String path,
SQLiteDatabase.CursorFactory factory);
Mais qu'est-ce que la "fabrique" argument censé être, ce que l'usine devrait être utilisé?
Aussi un peu inquiet à propos de ce qui se passe si l'utilisateur retire la carte SD alors que mon application est en cours d'utilisation..
Grâce
source d'informationauteur user291701
Vous devez vous connecter pour publier un commentaire.
Je n'ai pas essayé de faire ce que vous décrivez là, mais on peut supposer qu'il pouvait être fait et peut travail, avec quelques mises en garde. Tout d'abord, le stockage externe (carte SD) n'est pas sécurisé, de sorte que toute autre application, ou que l'utilisateur puisse le lire/écrire. Deuxièmement, comme vous l'avez remarqué, lorsqu'il est démonté la bd s'en va.
En raison de ces inconvénients, vous feriez probablement mieux d'essayer d'utiliser un espace de stockage interne de la base de données (par défaut), qui est petit et comprend peut-être des pointeurs vers des données externes (comme des images ou des fichiers) - qui eux-mêmes peuvent être sur le stockage externe (et qui ont des espaces réservés, ou toute autre manipulation, lorsque le stockage externe n'est pas disponible).
Encore, si vous voulez l'essayer, vous pourriez être mieux de remplacer le getDatabasePath méthode de Cadrecomme avec votre propre Application objet, puis passer que régulier,SQLiteOpenHelper. Alors vous ne avez pas à vous inquiéter le curseur de l'usine (qui est facultatif, comme la source confirme -- si juste de passer la valeur null si au contraire, vous voulez aller dans cette voie).
Le faire dans votre SQLiteOpenHelper constructeur:
Il va créer la base de données dans l'application du dossier sur la carte sd: /sdcard/Android/data/[your_package_name]/fichiers.
De cette façon, la base de données sera considéré comme faisant partie de l'application par android et supprimés automatiquement si l'utilisateur désinstalle l'application.
J'ai mon application j'ai une base de données importante et il sera, dans la plupart des cas, de ne pas tenir sur les vieux téléphones mémoire interne, par exemple le Désir de HTC. Il fonctionne bien sur la carte sd, et la plupart des applications sont "déplacés vers sdcard" eux-mêmes de toute façon ne vous inquiétez pas à propos de la base de données n'étant pas accessibles, car l'application ne sera pas accessible de soi.
Puis faire votre propre plat de la base de données la plupart des gens ont très peu de mémoire interne, et son ennuyeux qu'ils le mangent avec l'immense base de données.
"Que faire si ils retirer la carte SD" scénario - si l'utilisateur supprime la carte évidemment sa ne va pas au travail! Clairement. Il suffit de vérifier que vous n'obtenez une erreur lorsque vous essayez d'interagir avec la base, et si vous n'avez, dites-vous utilisateur - problème résolu.
Curseur usine est utilisée pour retourner une instance de votre Curseur personnalisé de mise en œuvre.
Généralement, il suffit d'utiliser SQLiteCursor, auquel cas la valeur null est passé de l'usine en argument.
Je déconseille de mettre une base de données sur une carte SD - vous de diminuer de manière significative la durée de vie de la carte, car il a une (grande, mais il existe encore) de limiter le nombre d'écritures possibles et des bases de données, un nombre écrit.
Également Ajouter la permission android Manifeste