Aller au contenu

Exporter une base sqlite dans l'apk


Recommended Posts

Bonjour,

Je me pose actuellement une question pour ma nouvelle appli :

Peut-on exporter des données sqlite dans une apk?

J'aurai besoin de pas mal de données et je trouve que les mettre en "dur" dans le code pour réaliser l'insertion au moment de l'installation alourdirait pas mal l'appli.

Merci par avance,

Cordialement.

Lien vers le commentaire
Partager sur d’autres sites

Bonsoir,

J'ai trouvé ma réponse depuis quelques jours, néanmoins je me heurte à un probleme, la copie pour des fichiers supérieurs a 1mo ne fonctionne pas (limite du systeme).

J'ai donc décidé de faire comme beaucoup et découper ma base de données en 3 morceaux qui doivent être réassemblés lors du premier lancement de l'appli.

Le problème et qu'il semble que le réassemblage corrompt la base de données, en effet, lors de la requete sql, une erreur "table not found" est levée. Or la table est bien dans la base de données sqlite de départ.

Je précise : le découpage est réalisé automatiquement en php.

2eme précision, après export et vérification avec phpliteadmin, il apparait que plus aucune table n'est enregistrée dans la db, mais qu'une table android_metadata est apparue.

Par contre, le fichier fait exactement la meme taille qu'avant découpage et est au moins aussi rempli.

Voici le code concerné :

protected void initDB(){
 try{
  String to="/data/data/package/databases/tt.db";
  OutputStream output=new FileOutputStream(to); //flux de sortie
  for(int i=0;i<3;i++){ // les trois fichiers sont tt_0, tt_1 et tt_2
InputStream input=context.getAssets().open("tt_"+String.valueOf(i)+".db");  //ouverture de la partie actuelle
byte[] buffer=new byte[1024];
int length;

while((length=input.read(buffer)) > 0){
 output.write(buffer, 0, length); //écriture dans le fichier db final
}
input.close(); //fermeture flux entrant

  }
  output.close(); //fermeture flux sortant
  output.flush(); //vidage
 }catch(Exception e){
  System.out.println("Error : "+e.getMessage());
 }
}

Quelqu'un a-t'il une idée?

Merci par avance :)

Modifié par Sylvain-a
Lien vers le commentaire
Partager sur d’autres sites

  • 2 months later...
  • 1 month later...
  • 3 weeks later...

Tu peux également tester de compresser ton fichier db que tu places dans le assets.

Aussi la limitation de la DB je ne la recontre plus depuis que j'utilise :


 OutputStream out = null;
 try {
  InputStream in = context.getAssets().open(dbPathAsset);
out = new FileOutputStream(pathOut);
  byte[] buffer = new byte[1024];
 int read;
 while ((read = in.read(buffer)) != -1) {
  out.write(buffer, 0, read);
 }
  in.close();
  in = null;
  out.flush();
  out.close();
  out = null;
 } catch (Exception e) {
  Log.e("tag", e.getMessage());
 }

Lien vers le commentaire
Partager sur d’autres sites

Rejoignez la conversation

Vous pouvez poster maintenant et vous enregistrez plus tard. Si vous avez un compte, connectez-vous maintenant pour poster.

Invité
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Répondre à ce sujet…

×   Collé en tant que texte enrichi.   Coller en tant que texte brut à la place

  Seulement 75 émoticônes maximum sont autorisées.

×   Votre lien a été automatiquement intégré.   Afficher plutôt comme un lien

×   Votre contenu précédent a été rétabli.   Vider l’éditeur

×   Vous ne pouvez pas directement coller des images. Envoyez-les depuis votre ordinateur ou insérez-les depuis une URL.

×
×
  • Créer...