Sylvain-a Posted January 6, 2012 Share Posted January 6, 2012 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. Quote Link to comment Share on other sites More sharing options...
Sylvain-a Posted January 11, 2012 Author Share Posted January 11, 2012 (edited) 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 January 12, 2012 by Sylvain-a Quote Link to comment Share on other sites More sharing options...
Willy55 Posted March 26, 2012 Share Posted March 26, 2012 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. Quote Link to comment Share on other sites More sharing options...
salimdz Posted March 26, 2012 Share Posted March 26, 2012 bonsoir on ne peux pas trouvé une solution avec les fichiers XML mieux que les tables sqlite avec ces problemes j'ai pensé à ca : Fichiers XML à la place d'une Base de Donnée Sqlite ? Quote Link to comment Share on other sites More sharing options...
Sylvain-a Posted March 27, 2012 Author Share Posted March 27, 2012 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) Quote Link to comment Share on other sites More sharing options...
salimdz Posted May 18, 2012 Share Posted May 18, 2012 bonjour merci pour votre reponse je vais verifié moi j'ai pensé à changé les tables par des fichiers xml Quote Link to comment Share on other sites More sharing options...
arnouf Posted June 6, 2012 Share Posted June 6, 2012 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()); } Quote Link to comment Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.