IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Android Discussion :

SQLite et apk


Sujet :

Android

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Novembre 2010
    Messages
    154
    Détails du profil
    Informations forums :
    Inscription : Novembre 2010
    Messages : 154
    Par défaut SQLite et apk
    Bonjour à tous,

    J'ai une application avec une base de données sqlite que je souhaite mettre en ligne.
    Dans ma classe pour créer ma base de données, j'ai créer la base, 3 tables et toutes les méthodes.
    Or mon applications comporte 10 tables et j'ai crée les 7 autres tables via un autre moyen (sqlitemanager via firefox).

    Je me pose quelques questions :
    - faut-il que toutes les tables soient déclarées dans la classe de mon app ?
    - si j'ai importé la base de données complète (créée via sqlite manager) via ddms dans data/data/monapp.fr/databases, lorsque j'exporte mon app, prendra-t-elle en compte la base que j'ai importé ou uniquement celle qui est notée dans mon activité ?

    Autre question, j'ai créé une seconde base de données par erreur. Comment faire pour l'effacer ?

    Merci.

  2. #2
    Membre éprouvé Avatar de linked
    Profil pro
    Développeur Android
    Inscrit en
    Mai 2008
    Messages
    88
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Android

    Informations forums :
    Inscription : Mai 2008
    Messages : 88
    Par défaut
    Bonjour,

    Un peu difficile de suivre ton raisonnement mais pour répondre à tes questions:

    1.Tu déclare les tables que tu veut dans ton application/classe du moment que tu travaille avec. Si tu n'en as pas besoin, tu n'a pas besoin de les déclarer mais je vois pas bien l'utilité qu'elles ont alors.

    2.Non, lorsque tu exporte ton application pour la publier, la base dans /data/data/.... ne sera pas exporté. Soit tu la met dans assets et tu la copie à la main au lancement, soit tu passe tout sur ton serveur et tu récupère tout au lancement (chose que je fait).

    Pour effacer, soit par eclipse, soit par java avec file.delete().

  3. #3
    Membre confirmé
    Inscrit en
    Novembre 2010
    Messages
    154
    Détails du profil
    Informations forums :
    Inscription : Novembre 2010
    Messages : 154
    Par défaut
    Citation Envoyé par linked Voir le message
    Un peu difficile de suivre ton raisonnement mais pour répondre à tes questions:

    1.Tu déclare les tables que tu veut dans ton application/classe du moment que tu travaille avec. Si tu n'en as pas besoin, tu n'a pas besoin de les déclarer mais je vois pas bien l'utilité qu'elles ont alors.
    En fait je déclare dans mon activity DataBase les 10 tables en faisant:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    private static final String TABLE_UNE = "table_une";
    private static final String COL_ID = "_id";
    private static final int NUM_COL_ID = 0;
    etc etc jusqu'à TABLE_DIX
    Par contre elles ne sont pas toutes déclarées dans
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    private static final String CREATE_BDD  = "CREATE TABLE " + TABLE_UNE + " (" + COL_ID + " INTEGER PRIMARY KEY AUTOINCREMENT, "
    + COL_ID_ID + " INTEGER, " + COL_TEXTE + " LONG TEXT NOT NULL, "
    + COL_TITRE + " TEXT NOT NULL);"
    Citation Envoyé par linked Voir le message

    2.Non, lorsque tu exporte ton application pour la publier, la base dans /data/data/.... ne sera pas exporté. Soit tu la met dans assets et tu la copie à la main au lancement, soit tu passe tout sur ton serveur et tu récupère tout au lancement (chose que je fait).
    Pour effacer, soit par eclipse, soit par java avec file.delete().
    Ah ! merci de l'info.
    Pour récupérer via serveur, je dois faire en sorte que l'app se connecte au serveur à chaque fois qu'elle se lance ?

    Je vais regarder comment faire pour la solution assets.

    Si je comprends bien je dois ajouter quelque chose de ce style:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    private boolean checkDataBase(){
       SQLiteDatabase checkDB = null;
        try{
               String myPath = DB_PATH + DB_NAME;
               checkDB = SQLiteDatabase.openDatabase(myPath, null, SQLiteDatabase.OPEN_READWRITE);
        }catch(SQLiteException e){
                //database does't exist yet.
        }
        if(checkDB != null){
                checkDB.close();
        }
        return checkDB != null ? true : false;
    }
    Du coup, une chose m'ennuie.
    J'ai crée une activity pour mettre à jour la base de données.
    Cette activité dispose d'un bouton, et lorsqu'on clique dessus, on télécharge mon database.db et il s'insère dans mon data/data.
    Ça n'est pas du tout la bonne solution en fait.

    Merci beaucoup

  4. #4
    Membre éprouvé Avatar de linked
    Profil pro
    Développeur Android
    Inscrit en
    Mai 2008
    Messages
    88
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Android

    Informations forums :
    Inscription : Mai 2008
    Messages : 88
    Par défaut
    Si tu copie ton database.db, tu n'a pas besoin de créer les tables avec des lignes de code puisque ça va écraser ta base existante.

    C'est seulement si tu veut mettre à jour ta base avec des tables qui n'existent pas ou pour être sure qu'elles existent que tu lance "CREATE TABLE". Perso j'utilise "CREATE TABLE IF NOT EXISTS" au lancement de l'application et ensuite je les met à jour avec mon serveur.

    A toi de voir quel est le meilleur moment pour se connecter au serveur. J'ai un code spécial pour compter le nombres de lignes dans la base et ensuite l'application décide si il y a mise à jour ou pas.

    Ca peut aussi bien être un fichier .txt avec la version de la base que ton application va regarder.

    Le code checkDataBase() peut être un début, pour la copie depuis assets j'ai mis un code dans ce post:

    http://www.developpez.net/forums/d12...tante-eclipse/

  5. #5
    Membre confirmé
    Inscrit en
    Novembre 2010
    Messages
    154
    Détails du profil
    Informations forums :
    Inscription : Novembre 2010
    Messages : 154
    Par défaut
    merci beaucoup linked, t'es trop fort

    je vais regarder cela de suite.
    je suis également tombé sur ce lien (que je partage au cas où) http://blog.matt-technology.com/inde...e-sous-android

  6. #6
    Membre confirmé
    Inscrit en
    Novembre 2010
    Messages
    154
    Détails du profil
    Informations forums :
    Inscription : Novembre 2010
    Messages : 154
    Par défaut
    Si je comprends la manip, je dois créer une nouvelle base vide, mettre la base remplie dans assets et dans ma classe qui gère la base de données créer la base vide et faire une copie par bytes de notre fichier vers la base vierge pour l'écraser.

    J'ai tenté d'ajouter:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    	public void createDataBase() throws IOException {
    		this.getReadableDatabase();
    		try {
    			copyDataBase();
    		}catch (IOException e) {
                throw new Error("Erreur de copie de la base !");
            }
    	}
     
     
        public void copyDataBase() throws IOException{
     
        	// crée le repertoire
    	File f=new File(DB_PATH);
    	f.mkdirs(); 
        	//Open your local db as the input stream
        	InputStream myInput = myContext.getAssets().open(NOM_BDD);
        	// Path to the just created empty db
        	String outFileName = DB_PATH + NOM_BDD;
        	//Open the empty db as the output stream
        	OutputStream myOutput = new FileOutputStream(outFileName);
        	//transfer bytes from the inputfile to the outputfile
        	byte[] buffer = new byte[1024];
        	int length;
        	while ((length = myInput.read(buffer))>0){
        		myOutput.write(buffer, 0, length);
        	}
        	//Close the streams
        	myOutput.flush();
        	myOutput.close();
        	myInput.close();
        }
    et de supprimer ce qu'il y avait dans le onCreate et onUpgrade mais j'ai une erreur dans l'émulateur (et dans le device).
    Le LogCat me donne une erreur sqliteexception car l'app ne trouve pas ma table.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. qui connait sqlite ?
    Par Emmanuel Lecoester dans le forum SQLite
    Réponses: 23
    Dernier message: 19/02/2010, 13h44
  2. SQLITE
    Par Betatesteur dans le forum SQLite
    Réponses: 2
    Dernier message: 24/06/2005, 12h41
  3. [SQLite]éliminer un motif dans des champ TEXT
    Par Invité(e) dans le forum Langage SQL
    Réponses: 2
    Dernier message: 26/05/2005, 17h44
  4. base de données en sqlite
    Par Cyrillou dans le forum SQLite
    Réponses: 1
    Dernier message: 12/05/2005, 15h37
  5. debuter en SQLite
    Par venomelektro dans le forum SQLite
    Réponses: 4
    Dernier message: 08/12/2004, 19h17

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo