Jump to content
Sign in to follow this  
Sylvain-a

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.

Share this post


Link to post
Share on other 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 :)

Edited by Sylvain-a

Share this post


Link to post
Share on other sites

Bonjour,

As-tu réussis à résoudre ton problème ?

Peut-tu donner tes avancés sur le sujet, cela m'intéresse également.

Merci.

Share this post


Link to post
Share on other sites

Oui, ça vient du fait que j'appelle la fonction getWritableDatabase (ou getReadable).

Il faut passer par SQLiteDatabase.open("database") (ou un truc comme ça, j'ai pas le code sous les yeux la)

Share this post


Link to post
Share on other sites

bonjour

merci pour votre reponse

je vais verifié

moi j'ai pensé à changé les tables par des fichiers xml

Share this post


Link to post
Share on other sites

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());
 }

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this  





×
×
  • Create New...