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] Application qui plante suite à l'intégration d'une base de données locale


Sujet :

Android

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2019
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2019
    Messages : 15
    Par défaut [SQLite] Application qui plante suite à l'intégration d'une base de données locale
    Bonjour,

    voilà pour un projet j'ai besoin d'une base de donnée SQLITE mais je ne comprend pas pourquoi au lancement de mon application quand j'ajoute les commandes "database.ajouterPlayer();" mon app plante au lancement et se ferme tandis que quand je commente cette ligne (ainsi que database.close()) mon application se lance normalement et je peut effectuer les actions qui ont été programmé (sans accès à la base bien sur) quelqu'un saurait de quoi cela provient ? j'ai suivi un tuto et regarder les ressources et d'après moi il n'y a pas d'erreur dans mon code, peut-être ai-je loupé quelque chose ?

    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
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    package com.example.never;
     
    import androidx.appcompat.app.AppCompatActivity;
     
    import android.annotation.SuppressLint;
    import android.database.sqlite.SQLiteOpenHelper;
    import android.os.Bundle;
    import android.util.Log;
    import android.view.View;
    import android.view.ViewGroup;
    import android.widget.Button;
    import android.widget.EditText;
    import android.widget.LinearLayout;
    import android.widget.RelativeLayout;
    import android.widget.TextView;
     
    public class NumberOfPlayers extends AppCompatActivity {
     
        private Button btnAdd;
     
        public TextView P1, P2, P3, P4, P5;
        private Database database;
     
        private ViewGroup layoutAddPlayer;
        private int id = 1;
        private EditText playerName;
        private LinearLayout.LayoutParams config;
     
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_number_of_players);
     
            P1 = (TextView) findViewById(R.id.P1);
            P2 = (TextView) findViewById(R.id.P2);
            P3 = (TextView) findViewById(R.id.P3);
            P4 = (TextView) findViewById(R.id.P4);
            P5 = (TextView) findViewById(R.id.P5);
            database = new Database(this);
     
            layoutAddPlayer = findViewById(R.id.addPlayerLayout);
            btnAdd = findViewById(R.id.btnAdd);
     
            for (int i = 0; i < 4; i++){
                playerName = new EditText(this);
                playerName.setId(id);
                playerName.setHint("Joueur n°"+playerName.getId());
                config = new LinearLayout.LayoutParams(
                        LinearLayout.LayoutParams.WRAP_CONTENT,
                        LinearLayout.LayoutParams.WRAP_CONTENT);
                config.setMargins(0,8,0,8);
                layoutAddPlayer.addView(playerName,config);
                database.ajouterPlayer();
                id++;
            }
            database.close();
        }
     
        public void addPlayer(View view) {
            playerName = new EditText(this);
            playerName.setId(id);
            playerName.setHint("Joueur n°"+playerName.getId());
            config = new LinearLayout.LayoutParams(
                    LinearLayout.LayoutParams.WRAP_CONTENT,
                    LinearLayout.LayoutParams.WRAP_CONTENT);
            config.setMargins(0,8,0,8);
            layoutAddPlayer.addView(playerName,config);
    //        database.addPlayer();
            id++;
        }
     
        public void play(View view) {
            /*for (int i = 0; i < id; i++) {
            }*/
        }
    }
    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
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    package com.example.jenaijamais;
     
    import android.content.Context;
    import android.database.sqlite.SQLiteDatabase;
    import android.database.sqlite.SQLiteOpenHelper;
    import android.util.Log;
     
    public class Database extends SQLiteOpenHelper {
        private static final String DATABASE_NAME = "Never.db";
        private static final int DATABASE_VERSION = 1;
     
        public Database(Context context){
            super(context, DATABASE_NAME, null, DATABASE_VERSION);
        }
        @Override
        public void onCreate(SQLiteDatabase db) {
     
            String PLAYER_TABLE = "CREATE TABLE players(" +
                    "playerID integer primary key autoincrement," +
                    "playerName text," +
                    "playerScore integer not null)";
            String QUESTION_TABLE = "CREATE TABLE questions(" +
                    "questionID integer primary key autoincrement," +
                    "questionTag text not null)";
            String GAMELOOP_TABLE = "CREATE TABLE gameLoop(" +
                    "gameQuestionID integer primary key autoincrement," +
                    "questionID integer not null," +
                    "questionPlay boolean)";
            db.execSQL(PLAYER_TABLE);db.execSQL(QUESTION_TABLE);db.execSQL(GAMELOOP_TABLE);
            Log.i("DATABASE", "onCreate invoked");
        }
     
        @Override
        public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
     
        }
     
        public void ajouterPlayer(){
            String sqlRequest = "INSERT INTO players(playerName, playerScore) VALUES" +
                    "(playerName = null,score = 0)";
            this.getWritableDatabase().execSQL(sqlRequest);
            Log.i("DATABASE", "addPlayer invoked");
        }
    }

  2. #2
    Membre chevronné
    Profil pro
    Inscrit en
    Juillet 2012
    Messages
    476
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2012
    Messages : 476
    Par défaut
    Bonjour,

    Les logs d'erreur te donneront la réponse, mais sinon, au lieu de passer ta requête en dur, tu peux utiliser la méthode expliquée dans la doc : https://developer.android.com/traini...ite#WriteDbRow

  3. #3
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2019
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2019
    Messages : 15
    Par défaut
    Bonsoir,

    J'ai déjà lu la doc parce que je me suis dit que j'avais forcément loupé un truc dans le tuto que j'ai suivi mais je vois vraiment pas où je me suis tromper, alors en effet quand je lis le log de retour au moment où mon app plante sa me dit que la table players n'est pas existante, je me suis alors dit que cela venait de ma requête alors je l'ai tester dans un "vérifieur" de code SQLite et mon code est normalement bon donc je ne comprends vraiment d'où me viens cette erreur.

  4. #4
    Candidat au Club Avatar de R1C29
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Mars 2020
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Mars 2020
    Messages : 3
    Par défaut La création de la base de données (peut-être)
    Avec SQLite il ne faut pas mettre l'id à la création de la TABLE (car il est créé de base...)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
                Cmd = "CREATE TABLE CLIENT ("
                Cmd &= " Sexe INTEGER,"
                Cmd &= " Nom TEXT,"
                Cmd &= " Prenom TEXT,"
                Cmd &= " Adresse TEXT,"
                Cmd &= " Ville TEXT,"
                Cmd &= " CodePostal INTEGER,"
                Cmd &= " Anniversaire DATE,"
                Cmd &= " Courriel TEXT,"
                Cmd &= " Telephone TEXT,"
                Cmd &= " Actif BOOLEAN)"
    Et pour lire un enregistrement il faut rajouter rowid, devant *

    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT rowid,* FROM CLIENT WHERE rowid= " & Idx

    Par exemple en Vb.Net (pour le principe) :

    Exemple de code pour créer une TABLE

    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
                SQLite_ouvrir_BaseDeDonnees(Fichier)
                Dim SQLcommand As SQLiteCommand = CON.CreateCommand
                Dim Cmd As String
                'Création de la table INDIVIDU         
                Cmd = "CREATE TABLE CLIENT ("
                Cmd &= " Sexe INTEGER,"
                Cmd &= " Nom TEXT,"
                Cmd &= " Prenom TEXT,"
                Cmd &= " Adresse TEXT,"
                Cmd &= " Ville TEXT,"
                Cmd &= " CodePostal INTEGER,"
                Cmd &= " Anniversaire DATE,"
                Cmd &= " Courriel TEXT,"
                Cmd &= " Telephone TEXT,"
                Cmd &= " Actif BOOLEAN)"
                SQLcommand.CommandText = Cmd
                SQLcommand.ExecuteNonQuery()
                SQLcommand.Dispose()
                SQLite_fermer_BaseDeDonnees()
    Pour Lire la TABLE :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
                'Ouvrir la base de données
                SQLite_ouvrir_BaseDeDonnees(Fichier)
                'Lecture du client
                Dim strSQL As String = "SELECT rowid,* FROM CLIENT WHERE rowid= " & Idx
                Dim c As New Client
                Dim cmd = New SQLiteCommand(strSQL, CON)
                Dim DR As SQLiteDataReader = cmd.ExecuteReader
                While (DR.Read())
                    SQLite_Lecture_données_un_client(DR, c)
                End While
                DR.Close()
                cmd.Dispose()
                'Fermer la base de données
                SQLite_fermer_BaseDeDonnees()

  5. #5
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2019
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2019
    Messages : 15
    Par défaut
    Bonsoir,
    Je suis désolé mais je n'ai absolument rien compris à ce que tu as écrit et je ne comprends absolument pas ton code pour créer une table, de plus dans ma table players id est simplement une variable pas l'id de la table ?

  6. #6
    Candidat au Club Avatar de R1C29
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Mars 2020
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Mars 2020
    Messages : 3
    Par défaut Ok, désolé
    Dans ton code je ne voit pas à quel moment du ouvre la base de données pour écrire dedans.
    Je ne vois pas non plus ou tu ferme la base de données quand tu n'en a plus besoin.

    Il y a donc trois chose :

    1 - Ouvrir la base de données
    2 - Envoyer des requêtes SQL (création de table,insertion, mise à jour, effacement, etc.)
    3 - Fermeture de la base de données

    Je vois pas les étapes 1 et 3. J'ai l'impression que tu fait seulement le 2.

Discussions similaires

  1. Réponses: 6
    Dernier message: 22/02/2015, 22h47
  2. Réponses: 0
    Dernier message: 17/06/2010, 22h37
  3. Application qui plante à cause des tabs ?
    Par astrolus dans le forum Windows Forms
    Réponses: 1
    Dernier message: 02/05/2008, 22h54
  4. Application qui plante quand lancé par sans débugage
    Par bossun dans le forum Général Dotnet
    Réponses: 9
    Dernier message: 12/07/2007, 12h08
  5. Réponses: 4
    Dernier message: 14/05/2006, 11h51

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