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 :

SQL(query) error or missing database.


Sujet :

Android

  1. #1
    Membre à l'essai
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2017
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2017
    Messages : 29
    Points : 17
    Points
    17
    Par défaut SQL(query) error or missing database.
    Bonjour,
    voila je tourne e rond depuis hier, mon exécution me renvoie pas mal d'erreurs, je cherche à débugger mais en vain !
    j'ai deux classes :tation,Plots
    leurs deux classes DAO :StationDAO,PlotDAO

    une classe DataBaseOpenHelper herité par SQLiteOpenHelper

    et une classe de test : StationActivity.java

    Quand je lance l'application, l’exécution s’arrête, quand je consulte le logcat voici les messages d'erreurs que je reçois :
    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
    03-03 18:18:05.429 7440-7440/ppe4.velib E/SQLiteDatabase: Error inserting capaciteS=20 presenceborneS=non situationS=reparation etatCs=panne nomS=victoire
                                                              android.database.sqlite.SQLiteException: table station has no column named etatCs (code 1): , while compiling: INSERT INTO station(capaciteS,presenceborneS,situationS,etatCs,nomS) VALUES (?,?,?,?,?)
                                                              #################################################################
                                                              Error Code : 1 (SQLITE_ERROR)
                                                              Caused By : SQL(query) error or missing database.
                                                              	(table station has no column named etatCs (code 1): , while compiling: INSERT INTO station(capaciteS,presenceborneS,situationS,etatCs,nomS) VALUES (?,?,?,?,?))
                                                              #################################################################
                                                                  at android.database.sqlite.SQLiteConnection.nativePrepareStatement(Native Method)
                                                                  at android.database.sqlite.SQLiteConnection.acquirePreparedStatement(SQLiteConnection.java:1000)
                                                                  at android.database.sqlite.SQLiteConnection.prepare(SQLiteConnection.java:565)
                                                                  at android.database.sqlite.SQLiteSession.prepare(SQLiteSession.java:588)
                                                                  at android.database.sqlite.SQLiteProgram.<init>(SQLiteProgram.java:59)
                                                                  at android.database.sqlite.SQLiteStatement.<init>(SQLiteStatement.java:31)
                                                                  at android.database.sqlite.SQLiteDatabase.insertWithOnConflict(SQLiteDatabase.java:1633)
                                                                  at android.database.sqlite.SQLiteDatabase.insert(SQLiteDatabase.java:1505)
                                                                  at ppe4.velib.Models.StationDAO.addStation(StationDAO.java:68)
                                                                  at ppe4.velib.Activities.StationActivity.onCreate(StationActivity.java:28)
                                                                  at android.app.Activity.performCreate(Activity.java:6904)
                                                                  at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1136)
                                                                  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3266)
                                                                  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3415)
                                                                  at android.app.ActivityThread.access$1100(ActivityThread.java:229)
                                                                  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1821)
                                                                  at android.os.Handler.dispatchMessage(Handler.java:102)
                                                                  at android.os.Looper.loop(Looper.java:148)
                                                                  at android.app.ActivityThread.main(ActivityThread.java:7331)
                                                                  at java.lang.reflect.Method.invoke(Native Method)
                                                                  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1230)
                                                                  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1120)
    03-03 18:18:05.439 7440-7440/ppe4.velib E/AndroidRuntime: FATAL EXCEPTION: main
                                                              Process: ppe4.velib, PID: 7440
                                                              java.lang.RuntimeException: Unable to start activity ComponentInfo{ppe4.velib/ppe4.velib.Activities.StationActivity}: android.database.sqlite.SQLiteException: no such column: etatCs (code 1): , while compiling: UPDATE station SET capaciteS=?,presenceborneS=?,situationS=?,etatCs=?,nomS=? WHERE numS = ?
                                                              #################################################################
                                                              Error Code : 1 (SQLITE_ERROR)
                                                              Caused By : SQL(query) error or missing database.
                                                              	(no such column: etatCs (code 1): , while compiling: UPDATE station SET capaciteS=?,presenceborneS=?,situationS=?,etatCs=?,nomS=? WHERE numS = ?)
                                                              #################################################################
                                                                  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3319)
                                                                  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3415)
                                                                  at android.app.ActivityThread.access$1100(ActivityThread.java:229)
                                                                  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1821)
                                                                  at android.os.Handler.dispatchMessage(Handler.java:102)
                                                                  at android.os.Looper.loop(Looper.java:148)
                                                                  at android.app.ActivityThread.main(ActivityThread.java:7331)
                                                                  at java.lang.reflect.Method.invoke(Native Method)
                                                                  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1230)
                                                                  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1120)
                                                               Caused by: android.database.sqlite.SQLiteException: no such column: etatCs (code 1): , while compiling: UPDATE station SET capaciteS=?,presenceborneS=?,situationS=?,etatCs=?,nomS=? WHERE numS = ?
                                                              #################################################################
                                                              Error Code : 1 (SQLITE_ERROR)
                                                              Caused By : SQL(query) error or missing database.
                                                              	(no such column: etatCs (code 1): , while compiling: UPDATE station SET capaciteS=?,presenceborneS=?,situationS=?,etatCs=?,nomS=? WHERE numS = ?)
                                                              #################################################################
                                                                  at android.database.sqlite.SQLiteConnection.nativePrepareStatement(Native Method)
                                                                  at android.database.sqlite.SQLiteConnection.acquirePreparedStatement(SQLiteConnection.java:1000)
                                                                  at android.database.sqlite.SQLiteConnection.prepare(SQLiteConnection.java:565)
                                                                  at android.database.sqlite.SQLiteSession.prepare(SQLiteSession.java:588)
                                                                  at android.database.sqlite.SQLiteProgram.<init>(SQLiteProgram.java:59)
                                                                  at android.database.sqlite.SQLiteStatement.<init>(SQLiteStatement.java:31)
                                                                  at android.database.sqlite.SQLiteDatabase.updateWithOnConflict(SQLiteDatabase.java:1738)
                                                                  at android.database.sqlite.SQLiteDatabase.update(SQLiteDatabase.java:1686)
                                                                  at ppe4.velib.Models.StationDAO.modifStation(StationDAO.java:85)
                                                                  at ppe4.velib.Activities.StationActivity.onCreate(StationActivity.java:38)
                                                                  at android.app.Activity.performCreate(Activity.java:6904)
                                                                  at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1136)
                                                                  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3266)
                                                                  	... 9 more
    en gros j'ai cette erreur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Caused By : SQL(query) error or missing database.
                                                              	(table station has no column named etatCs (code 1): , while compiling: INSERT INTO station(capaciteS,presenceborneS,situationS,etatCs,nomS) VALUES (?,?,?,?,?))
                                                              #################################################################


    voici mon code :

    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
     
    databaseOpenHelper.java
    package ppe4.velib.Models;
     
    import android.content.Context;
    import android.database.sqlite.SQLiteDatabase;
    import android.database.sqlite.SQLiteOpenHelper;
     
    /**
     * Created by PC on 11/02/2017.
     */
    public class DatabaseOpenHelper extends SQLiteOpenHelper {
     
        private static final String DATABASE_NAME = "db.sqlite";
        private static final int DATABASE_VERSION = 1;
        private static DatabaseOpenHelper sInstance;
     
        public static synchronized DatabaseOpenHelper getInstance(Context context) {
            if (sInstance == null) { sInstance = new DatabaseOpenHelper(context); }
            return sInstance;
        }
     
        private DatabaseOpenHelper(Context context) {
            super(context, DATABASE_NAME, null, DATABASE_VERSION);
        }
     
        @Override
        public void onCreate(SQLiteDatabase sqLiteDatabase) {
            // Création de la base de données
            // on exécute ici les requêtes de création des tables
            sqLiteDatabase.execSQL(StationDAO.STATION_TABLE_CREATE); // création table "station"
            sqLiteDatabase.execSQL(PlotDAO.PLOT_TABLE_CREATE); // création table "plot"
        }
     
        @Override
        public void onUpgrade(SQLiteDatabase sqLiteDatabase, int i, int i2) {
            // Mise à jour de la base de données
            // méthode appelée sur incrémentation de DATABASE_VERSION
            // on peut faire ce qu'on veut ici, comme recréer la base :
            onCreate(sqLiteDatabase);
        }
     
     
    }
    stationDAO

    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
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    package ppe4.velib.Models;
     
    import android.content.ContentValues;
    import android.content.Context;
    import android.database.Cursor;
    import android.database.sqlite.SQLiteDatabase;
    import ppe4.velib.Metiers.Station;
     
     
     
        public class StationDAO {
     
     
        private static final String STATION_TABLE_NAME = "station";
     
        public static final String STATION_NUM = "numS";
        public static final String STATION_ETATCS = "etatCs";
        public static final String STATION_NOM = "nomS";                                      ////définir la façon dont la base de données sera ...
        public static final String STATION_SITUATION = "situationS";
        public static final String STATION_CAPACITE = "capaciteS";
        public static final String STATION_PRESENCEBORNE = "presenceborneS";
     
     
     
        public static final String STATION_TABLE_CREATE = "CREATE TABLE " + STATION_TABLE_NAME +
                " (" +
               " "+STATION_NUM + " INTEGER PRIMARY KEY AUTOINCREMENT, " +
                " "+STATION_ETATCS + "TEXT," +                                            //implementation
                " "+STATION_NOM + " TEXT, " +
                " "+STATION_SITUATION + " TEXT, " +
                " "+STATION_CAPACITE + " INTEGER , " +
                " "+STATION_PRESENCEBORNE + " TEXT);";
     
     
     
        private DatabaseOpenHelper maBaseSQLite; // notre gestionnaire du fichier SQLite
            private SQLiteDatabase db;
     
            // Constructeur
            public StationDAO(Context context)
            {
                maBaseSQLite = DatabaseOpenHelper.getInstance(context);
            }
     
            public void open()
            {
                //on ouvre la table en lecture/écriture
                db = maBaseSQLite.getWritableDatabase();
            }
     
            public void close()
            {
                //on ferme l'accès à la BDD
                db.close();
            }
     
            public long addStation(Station station) {
                // Ajout d'un enregistrement dans la table
     
                ContentValues values = new ContentValues();
                values.put(STATION_ETATCS, station.getEtatCS());
                values.put(STATION_NOM, station.getNomS());
                values.put(STATION_SITUATION, station.getSituation());
                values.put(STATION_CAPACITE, station.getCapacite());
                values.put(STATION_PRESENCEBORNE, station.getPresenceBorne());
     
                // insert() retourne l'id du nouvel enregistrement inséré, ou -1 en cas d'erreur
                return db.insert(STATION_TABLE_NAME,null,values);
            }
     
            public int modifStation(Station station) {
                // modification d'un enregistrement
                // valeur de retour : (int) nombre de lignes affectées par la requête
     
                ContentValues values = new ContentValues();
                values.put(STATION_ETATCS, station.getEtatCS());
                values.put(STATION_NOM, station.getNomS());
                values.put(STATION_SITUATION, station.getSituation());
                values.put(STATION_CAPACITE, station.getCapacite());
                values.put(STATION_PRESENCEBORNE, station.getPresenceBorne());
     
                String where = STATION_NUM+" = ?";
                String[] whereArgs = {station.getNumS()+""};
     
                return db.update(STATION_TABLE_NAME, values, where, whereArgs);
            }
     
            public int supStation(Station station) {
                // suppression d'un enregistrement
                // valeur de retour : (int) nombre de lignes affectées par la clause WHERE, 0 sinon
     
                String where = STATION_NUM+" = ?";
                String[] whereArgs = {station.getNumS()+""};
     
                return db.delete(STATION_TABLE_NAME, where, whereArgs);
            }
     
            public Station getStationParNum(int numS) {
                // Retourne la station dont le num est passé en paramètre
     
                Station s =new Station(0, "", "", "",0 , "");
     
                Cursor c = db.rawQuery("SELECT * FROM "+STATION_TABLE_NAME+" WHERE "+STATION_NUM+"="+numS, null);
                if (c.moveToFirst()) {
                    s.setNumS(c.getInt(c.getColumnIndex(STATION_NUM)));
                    s.setEtatCS(c.getString(c.getColumnIndex(STATION_ETATCS)));
                    s.setNomS(c.getString(c.getColumnIndex(STATION_NOM)));
                    s.setSituation(c.getString(c.getColumnIndex(STATION_SITUATION)));
                    s.setCapacite(c.getInt(c.getColumnIndex(STATION_CAPACITE)));
                    s.setPresenceBorne(c.getString(c.getColumnIndex(STATION_PRESENCEBORNE)));
                    c.close();
                }
     
                return s;
            }
     
            public Cursor getStations() {
                // sélection de tous les enregistrements de la table
                return db.rawQuery("SELECT * FROM "+STATION_TABLE_NAME, null);
            }
     
     
     
        }
    [CODE]stationActivity pour tester:

    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
    package ppe4.velib.Activities;
     
    import android.app.Activity;
    import android.database.Cursor;
    import android.os.Bundle;
    import android.util.Log;
     
     
    import ppe4.velib.Metiers.Station;
    import ppe4.velib.Models.StationDAO;
    import ppe4.velib.R;
     
    /**
     * Created by PC on 16/02/2017.
     */
    public class StationActivity extends Activity {
        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.station_display);
     
     
            StationDAO s = new StationDAO(this); // gestionnaire de la table "animal"
            s.open(); // ouverture de la table en lecture/écriture
     
    // insertion. L'id sera attribué automatiquement par incrément
    //        s.addStation(new Station(0,"courant","Quinconce","Fonctionne",15,"oui"));
            s.addStation(new Station(1,"panne","victoire","reparation",20,"non"));
     
    // modification du nom de la station dont l'id est 1
            Station station= s.getStationParNum(1);
            station.setEtatCS("panneset");
            station.setNomS("stGenes");
            station.setSituation("fonctionneModif");
            station.setCapacite(12);
            station.setPresenceBorne("Non");
     
            s.modifStation(station);
    // suppression
            s.supStation(station);
     
    // Listing des enregistrements de la table
            Cursor c = s.getStations();
            if (c.moveToFirst())
            {
                do {
                    Log.d("test",
                            c.getInt(c.getColumnIndex(StationDAO.STATION_NUM)) + "," +
                                    c.getString(c.getColumnIndex(StationDAO.STATION_NOM))
                    );
                }
                while (c.moveToNext());
            }
            c.close(); // fermeture du curseur
     
    // fermeture du gestionnaire
            s.close();
     
     
     
        }
     
     
    }
    le mssg d'erreur m'envoir ca
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    table station has no column named etatCs (code 1): , while compiling: INSERT INTO station
    alors que je l'ai bien declaré !

    voyez vous ou je me suis planté , vous ?

    merci svp!

  2. #2
    Membre habitué
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    265
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 265
    Points : 181
    Points
    181
    Par défaut re
    l'erreur c :
    table station has no column named etatCs

    t'as pas un catalogue de ta table ou un requeteur pour vérifier indépendemment de ton code la requete.

  3. #3
    Membre extrêmement actif
    Profil pro
    Développeur
    Inscrit en
    Mars 2012
    Messages
    1 969
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Mars 2012
    Messages : 1 969
    Points : 3 375
    Points
    3 375
    Par défaut
    "no column named etatCs"

    upgrade ta table
    Si la réponse vous a aidé, pensez à cliquer sur +1

  4. #4
    Membre à l'essai
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2017
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2017
    Messages : 29
    Points : 17
    Points
    17
    Par défaut
    Citation Envoyé par hotcryx Voir le message
    "no column named etatCs"

    upgrade ta table

    merci pour ta proposition mais ça ne marche toujours pas

  5. #5
    Membre à l'essai
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2017
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2017
    Messages : 29
    Points : 17
    Points
    17
    Par défaut
    Citation Envoyé par batou22003 Voir le message
    l'erreur c :
    table station has no column named etatCs

    t'as pas un catalogue de ta table ou un requeteur pour vérifier indépendemment de ton code la requete.
    L’exécution montre que j'ai 0 erreurs, mais en cliquant sur le bouton de mon terminal l'application s’arrête et je reçois les erreurs dans le log

  6. #6
    Membre extrêmement actif
    Profil pro
    Développeur
    Inscrit en
    Mars 2012
    Messages
    1 969
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Mars 2012
    Messages : 1 969
    Points : 3 375
    Points
    3 375
    Par défaut
    "no such column: etatCs"

    Tu as une erreur.

    Regarde avec adb le schema actuel de la db et corrige la table en conséquence avec ALTER TABLE.
    Rem: tu dois aussi upgrader le nr de version de la db dans DbHelper.
    Si la réponse vous a aidé, pensez à cliquer sur +1

  7. #7
    Membre à l'essai
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2017
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2017
    Messages : 29
    Points : 17
    Points
    17
    Par défaut
    Merci
    hotcryx
    ,
    batou22003
    , j'avais c’était une simple erreur d'un point virgule que j'avais oublié lors de la creation de la table.

    je profite vous demander ; comment on relie deux tables ; par ex , une table station et une table plot (en disant qu'une station a plusieurs plots ) , je voudrais avoir une listes des stations et en cliquant sur un nom de la station , afficher les plots de cette station.

    vous voyez a peu près ?

  8. #8
    Membre extrêmement actif
    Profil pro
    Développeur
    Inscrit en
    Mars 2012
    Messages
    1 969
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Mars 2012
    Messages : 1 969
    Points : 3 375
    Points
    3 375
    Par défaut
    table station
    stationid
    ====================
    1 ...
    2 ...
    4 ...


    table plot
    plotid, stationid
    ====================
    1, 1
    2, 1
    3, 2
    3, 4

    Obtenir tous les plots de la station 1:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    select s.stationid, p.plotid
    from station s
    inner join plot p on p.stationid = s.stationid
    where s.stationid = 1;
    Si la réponse vous a aidé, pensez à cliquer sur +1

  9. #9
    Membre à l'essai
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2017
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2017
    Messages : 29
    Points : 17
    Points
    17
    Par défaut
    Citation Envoyé par hotcryx Voir le message
    table station
    stationid
    ====================
    1 ...
    2 ...
    4 ...


    table plot
    plotid, stationid
    ====================
    1, 1
    2, 1
    3, 2
    3, 4

    Obtenir tous les plots de la station 1:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    select s.stationid, p.plotid
    from station s
    inner join plot p on p.stationid = s.stationid
    where s.stationid = 1;

    Bonjour
    hotcryx
    , je suis désolé de revenir sur votre réponse un peu tard, j'étais super occupé c'est pour ça et merci beaucoup pour ta réponse, mais je ne vois pas vraiment comment je pourrais faire cette jointure alors les tables sont traitées indépendamment , je ne sais pas comment je pourrais lier mes classes PlotsDAO et StationDAO qui sont sensées de gérer les requêtes de ma base.

    d’après ce que je pense, la classe Station a une liste des plots :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    private static ArrayList<Plots> lesPlots = new ArrayList<Plots>();
    , et un plot doit avoir sa station correspondante :,


    j'ai essayé de faire ceci :
    une méthode dans PlotDAO qui récupère touts les plots correspondants a un numS:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
        public Cursor getPlotParNumS(int numS) {
            // Retourne  une liste des plots dont le numS est passé en paramètre
            return db.rawQuery("SELECT * FROM "+PLOT_TABLE_NAME+" WHERE "+col_NUMS+"="+numS, null);
     
        }
    une autre méthode dans StationDAO qui fait appel à la méthode ci dessus :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
        //methode pour retourner les plots correspondants au numero de la station
            public Cursor getPlots(int numS) {
                plots = new PlotDAO(this);
     
                plots.open();
     
               return plots.getPlotParNumS(numS);
     
            }
    quand pensez vous ? je suis à votre ecoute svp , Merci

  10. #10
    Membre extrêmement actif
    Profil pro
    Développeur
    Inscrit en
    Mars 2012
    Messages
    1 969
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Mars 2012
    Messages : 1 969
    Points : 3 375
    Points
    3 375
    Par défaut
    Tu dois faire quelque-chose comme ça.
    VerseBO est défini plus bas et le Concat concatène simplement.
    Là je lis la db sur base des paramètres et retourne une liste d'objet.
    Rem: c'est toujours préférable de nommer les champs lors des Select...

    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
    protected ArrayList<VerseBO> GetVerse(final String tbbName, final int bNumber, final int cNumber, final int vNumber)
        {
            String sql = null;
            Cursor c = null;
            ArrayList<VerseBO> lstVerse = new ArrayList<VerseBO>();
     
            try
            {
                VerseBO verse;
     
                sql = PCommon.ConcaT("SELECT b.id, b.vText, r.bName, r.bsName, n.mark, b.bbName, ", this.CaseBible("b.bbName", tbbName),
                                    " FROM bible b",
                                    " INNER JOIN bibleRef r ON r.bbName=b.bbName AND r.bNumber=b.bNumber",
                                    " LEFT OUTER JOIN bibleNote n ON n.bNumber=b.bNumber AND n.cNumber=b.cNumber AND n.vNumber=b.vNumber",
                                    " WHERE b.bbName IN ", this.InBible(tbbName),
                                    " AND b.bNumber=", bNumber,
                                    " AND b.cNumber=", cNumber,
                                    " AND b.vNumber=", vNumber,
                                    " ORDER BY bbNameOrder ASC");
     
                c = _db.rawQuery(sql, null);
                c.moveToFirst();
     
                while (!c.isAfterLast())
                {
                    verse = new VerseBO();
                    verse.id = c.getInt(0);
                    verse.bbName = c.getString(6);
                    verse.bName = c.getString(2);
                    verse.bsName = c.getString(3);
                    verse.bNumber = bNumber;
                    verse.cNumber = cNumber;
                    verse.vNumber = vNumber;
                    verse.vText = c.getString(1);
                    verse.mark = c.getInt(4);
                    lstVerse.add(verse);
     
                    c.moveToNext();
                }
            }
            catch (SQLException ex)
            {
                if (PCommon._isDebugVersion) PCommon.LogR(_context, ex);
            }
            finally
            {
                //_db.endTransaction();
                sql = null;
     
                if (c != null)
                {
                    c.close();
                    c = null;
                }
            }
     
            return lstVerse;
        }
    Si la réponse vous a aidé, pensez à cliquer sur +1

  11. #11
    Membre à l'essai
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2017
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2017
    Messages : 29
    Points : 17
    Points
    17
    Par défaut
    Citation Envoyé par hotcryx Voir le message
    Tu dois faire quelque-chose comme ça.
    VerseBO est défini plus bas et le Concat concatène simplement.
    Là je lis la db sur base des paramètres et retourne une liste d'objet.
    Rem: c'est toujours préférable de nommer les champs lors des Select...

    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
    protected ArrayList<VerseBO> GetVerse(final String tbbName, final int bNumber, final int cNumber, final int vNumber)
        {
            String sql = null;
            Cursor c = null;
            ArrayList<VerseBO> lstVerse = new ArrayList<VerseBO>();
     
            try
            {
                VerseBO verse;
     
                sql = PCommon.ConcaT("SELECT b.id, b.vText, r.bName, r.bsName, n.mark, b.bbName, ", this.CaseBible("b.bbName", tbbName),
                                    " FROM bible b",
                                    " INNER JOIN bibleRef r ON r.bbName=b.bbName AND r.bNumber=b.bNumber",
                                    " LEFT OUTER JOIN bibleNote n ON n.bNumber=b.bNumber AND n.cNumber=b.cNumber AND n.vNumber=b.vNumber",
                                    " WHERE b.bbName IN ", this.InBible(tbbName),
                                    " AND b.bNumber=", bNumber,
                                    " AND b.cNumber=", cNumber,
                                    " AND b.vNumber=", vNumber,
                                    " ORDER BY bbNameOrder ASC");
     
                c = _db.rawQuery(sql, null);
                c.moveToFirst();
     
                while (!c.isAfterLast())
                {
                    verse = new VerseBO();
                    verse.id = c.getInt(0);
                    verse.bbName = c.getString(6);
                    verse.bName = c.getString(2);
                    verse.bsName = c.getString(3);
                    verse.bNumber = bNumber;
                    verse.cNumber = cNumber;
                    verse.vNumber = vNumber;
                    verse.vText = c.getString(1);
                    verse.mark = c.getInt(4);
                    lstVerse.add(verse);
     
                    c.moveToNext();
                }
            }
            catch (SQLException ex)
            {
                if (PCommon._isDebugVersion) PCommon.LogR(_context, ex);
            }
            finally
            {
                //_db.endTransaction();
                sql = null;
     
                if (c != null)
                {
                    c.close();
                    c = null;
                }
            }
     
            return lstVerse;
        }
    Bonjour
    hotcryx
    Merci beaucoup pour ta réponse et je me suis référé la dessus pour faire la requête et dans ma classe StationDAO j'ai fait une méthode comme
    public List<Plots> getAllPlots(int numS) {
    ceci :
    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
    public List<Plots> getAllPlots(int numS) {
            List<Plots> plotsList = new ArrayList<>();
     
            plots = new PlotDAO(this);
     
            plots.open();
     
            // select s.stationid, p.plotid
            //from station s
            //inner join plot p on p.stationid = s.stationid
            //where s.stationid = 1;
            /*
            String PLOTS_SELECT_QUERY =
                    String.format("SELECT * FROM"+ STATION_TABLE_NAME+" INNER JOIN "+plots.PLOT_TABLE_NAME+" ON "+plots.PLOT_TABLE_NAME+"."+STATION_NUM+" = "+STATION_TABLE_NAME+"."+STATION_NUM+ " WHERE "+STATION_NUM+"="+numS, null);
    */
            String PLOTS_SELECT_QUERY = String.format("SELECT * FROM %s LEFT OUTER JOIN %s ON %s.%s = %s.%s WHERE %s = %s",
     
                  STATION_TABLE_NAME, 
                  plots.PLOT_TABLE_NAME,
                  plots.PLOT_TABLE_NAME, STATION_NUM, 
                  STATION_TABLE_NAME, STATION_NUM,
                  STATION_NUM,
                  +numS);
     
            // "getReadableDatabase()" and "getWriteableDatabase()" return the same object (except under low
            // disk space scenarios)
            Cursor c = db.rawQuery(PLOTS_SELECT_QUERY, null);
            Plots p = null;
            try {
                if (c.moveToFirst()) {
                    do {
                        p = new Plots(0, 0, "");
                        plots = new PlotDAO(this);
     
                        plots.open();
                        p.setNumP(c.getInt(c.getColumnIndex(plots.col_NUMP)));
                        p.setNumS(c.getInt(c.getColumnIndex(STATION_NUM)));
                        p.setEtatCP(c.getString(c.getColumnIndex(plots.col_ETATP)));
                        plotsList.add(p);
                    } while (c.moveToNext());
                }
     
            } catch (Exception e) {
                Log.d(TAG, "Error while trying to get Plots from database");
            } finally {
                if (c != null && !c.isClosed()) {
                    c.close();
                }
            }
            return plotsList;
     
            }
    Mais quand je teste mon code, rien ne s'affiche; que ce soit une liste des stations tout court ou autres,...même dans le log il y a rien ! et l'application s’arrête directement.
    voici mon code de la classe "Stationactivity "

    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
     
    public class StationActivity extends ListActivity {
     
        private StationDAO stationdao;
        protected ListAdapter adapter;
     
     
        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.station_display);
     
            //Création d'une instance de ma classe StationDAO
            stationdao = new StationDAO(this);
     
            //On ouvre la base de données pour écrire dedans
            stationdao.open();
     
     
    // insertion. L'id sera attribué automatiquement par incrément
            stationdao.addStation(new Station(0, "courant", "Quinconce", "Fonctionne", 15, "oui"));
            stationdao.addStation(new Station(1, "panne", "st genes", "reparation", 20, "non"));
     
    // modification du nom de la station dont l'id est 1
            Station station = stationdao.getStationParNum(1);
            station.setEtatCS("panneset");
            station.setNomS("stGenes");
            station.setSituation("fonctionneModif");
            station.setCapacite(12);
            station.setPresenceBorne("Non");
     
            stationdao.modifStation(station);
    // suppression
            stationdao.supStation(station);
     
     
            //méthode pour placer tous les stations dans la listview
            StationsBind();
        }
     
        private void StationsBind() {
     
            Cursor c = stationdao.getStations();
            startManagingCursor(c);
     
            SimpleCursorAdapter adapter = new SimpleCursorAdapter(this, R.layout.activity_item_station, c,
     
                    new String[]{"numS", "Nom", "Etat"}, new int[]{R.id.numS, R.id.nomS, R.id.etatS});
            getListView().setAdapter(adapter);
     
     
        }
     
        public void onListItemClick(ListView p, View v, int position, long id) {
            Intent intent = new Intent(this, PlotActivity.class);
            Cursor c = (Cursor) adapter.getItem(position);
            intent.putExtra("StationNum", c.getInt(c.getColumnIndex(StationDAO.STATION_NUM)) + " - " +
                    c.getString(c.getColumnIndex(StationDAO.STATION_NOM)));
            startActivity(intent);
     
        }
    ou est ce que j'aurais fait une erreur s'il vous plait ?

    Merci

  12. #12
    Membre extrêmement actif
    Profil pro
    Développeur
    Inscrit en
    Mars 2012
    Messages
    1 969
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Mars 2012
    Messages : 1 969
    Points : 3 375
    Points
    3 375
    Par défaut
    Essaye petit bout par petit bout.
    Teste getAllPlots en debug (tu fais un appel dans onCreate pour tester) pour être certains qu'il y a bien des données et qu'elles sont correctes.

    Ton Do while avec un if au début sent pas bon.
    Pourquoi ne pas faire un c.movefirst(); while(cond){ } comme je l'ai fait?

    Perso, j'éviterais les concaténations avec les + + + + c'est peu lisible et quand tu dois donner du support, tu perds un temps fou.

    Rem: j'évite aussi d'utiliser le this comme context, parfois le code plante en fonction d'où tu l'appelles (context différent).
    Je préfère getApplicationContext...
    Si la réponse vous a aidé, pensez à cliquer sur +1

  13. #13
    Membre à l'essai
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2017
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2017
    Messages : 29
    Points : 17
    Points
    17
    Par défaut
    Citation Envoyé par [QUOTE
    hotcryx
    ;9093457]Essaye petit bout par petit bout.
    Teste getAllPlots en debug (tu fais un appel dans onCreate pour tester) pour être certains qu'il y a bien des données et qu'elles sont correctes.

    Ton Do while avec un if au début sent pas bon.
    Pourquoi ne pas faire un c.movefirst(); while(cond){ } comme je l'ai fait?

    Perso, j'éviterais les concaténations avec les + + + + c'est peu lisible et quand tu dois donner du support, tu perds un temps fou.

    Rem: j'évite aussi d'utiliser le this comme context, parfois le code plante en fonction d'où tu l'appelles (context différent).
    Je préfère getApplicationContext...[/QUOTE]


    hotcryx
    , Merci beaucoup mais ça ne marche toujours pas mon le test d'affichage , j'ai essayé au moins 4 méthodes mais en vain. maintenant j'essaye de faire ceci
    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
    public class StationActivity extends Activity {
        private StationDAO dbHelper;
        private SimpleCursorAdapter dataAdapter;
     
     
        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate( savedInstanceState );
            setContentView( R.layout.station_display );
            dbHelper = new StationDAO( this );
     
     
            dbHelper.open(); // ouverture de la table en lecture/écriture
            dbHelper.addSomedata();
     
     
            //Generate ListView from SQLite Database
            displayListView();
        }
     
        private void displayListView() {
            Cursor cursor = dbHelper.getStations();
            // The desired columns to be bound
            String[] columns = new String[]{StationDAO.STATION_NUM, StationDAO.STATION_ETATCS, StationDAO.STATION_NOM,
     
     
            };
     
            // the XML defined views which the data will be bound to
            int[] to = new int[]{R.id.numS, R.id.etatS, R.id.nomS,
     
            };
     
            dataAdapter = new SimpleCursorAdapter( this, R.layout.station_display, cursor, columns, to, 0 );
     
            ListView listView = (ListView) findViewById( R.id.list );
     
            // Assign adapter to ListView
            listView.setAdapter( dataAdapter );
     
     
        }
    }
    et j'ai un message d'erreur du type :
    column '_id' does not exist
    ,*

    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
    E/AndroidRuntime: FATAL EXCEPTION: main
                      Process: ppe4.velib, PID: 9899
                      java.lang.RuntimeException: Unable to start activity ComponentInfo{ppe4.velib/ppe4.velib.Activities.StationActivity}: java.lang.IllegalArgumentException: column '_id' does not exist
                          at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3319)
                          at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3415)
                          at android.app.ActivityThread.access$1100(ActivityThread.java:229)
                          at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1821)
                          at android.os.Handler.dispatchMessage(Handler.java:102)
                          at android.os.Looper.loop(Looper.java:148)
                          at android.app.ActivityThread.main(ActivityThread.java:7331)
                          at java.lang.reflect.Method.invoke(Native Method)
                          at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1230)
                          at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1120)
                       Caused by: java.lang.IllegalArgumentException: column '_id' does not exist
                          at android.database.AbstractCursor.getColumnIndexOrThrow(AbstractCursor.java:333)
                          at android.widget.CursorAdapter.init(CursorAdapter.java:180)
                          at android.widget.CursorAdapter.<init>(CursorAdapter.java:157)
                          at android.widget.ResourceCursorAdapter.<init>(ResourceCursorAdapter.java:96)
                          at android.widget.SimpleCursorAdapter.<init>(SimpleCursorAdapter.java:104)
                          at ppe4.velib.Activities.StationActivity.displayListView(StationActivity.java:59)
                          at ppe4.velib.Activities.StationActivity.onCreate(StationActivity.java:43)
                          at android.app.Activity.performCreate(Activity.java:6904)
                          at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1136)
                          at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3266)
                          at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3415)*
                          at android.app.ActivityThread.access$1100(ActivityThread.java:229)*
                          at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1821)*
                          at android.os.Handler.dispatchMessage(Handler.java:102)*
                          at android.os.Looper.loop(Looper.java:148)*
                          at android.app.ActivityThread.main(ActivityThread.java:7331)*
                          at java.lang.reflect.Method.invoke(Native Method)*
                          at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1230)*
                          at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1120)*
    I/Process: Sending signal. PID: 9899 SIG: 9
    Application terminated.
    or je n'ai pas de colonne _id défini, dans ma table 'station'.... j'ai regardé sur l'internet , apparemment c'est à cause du 'SimpleCursorAdapter' , je ne sais pas comment résoudre ça.

    est ce que y 'aurait t il une autre méthode sans l'utilisation du SimpleCursorAdapter ? merci d'avance

  14. #14
    Expert confirmé
    Avatar de Hephaistos007
    Profil pro
    Enseignant Chercheur
    Inscrit en
    Décembre 2004
    Messages
    2 493
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2004
    Messages : 2 493
    Points : 4 166
    Points
    4 166
    Par défaut
    Pour qu'un SimpleCursorAdapter fonctionne, il faut la présence d'une colonne spécifique _id dans le Cursor (Diapo n°101 du cours).

    Soit cette colonne existe d'origine au niveau de la structure de la table (contraignant), soit tu l'obtiens par un alias au moment de la requête SQL :
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT num_station as _id, ... FROM stations
    Il vaut mieux mobiliser son intelligence sur des conneries que mobiliser sa connerie sur des choses intelligentes --- devise SHADOKS

    Kit de survie Android : mon guide pour apprendre à programmer sur Android, mon tutoriel sur les web services et enfin l'outil en ligne pour vous faire gagner du temps - N'oubliez pas de consulter la FAQ Android

  15. #15
    Membre à l'essai
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2017
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2017
    Messages : 29
    Points : 17
    Points
    17
    Par défaut
    Citation Envoyé par Hephaistos007 Voir le message
    Pour qu'un SimpleCursorAdapter fonctionne, il faut la présence d'une colonne spécifique _id dans le Cursor (Diapo n°101 du cours).

    Soit cette colonne existe d'origine au niveau de la structure de la table (contraignant), soit tu l'obtiens par un alias au moment de la requête SQL :
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT num_station as _id, ... FROM stations


    Merci beaucoup
    Hephaistos007;9104365
    , mais quand j'esaye de faire ceci , j'obtiens encore une autre erreur :
    Caused by: java.lang.IllegalArgumentException: column 'numS' does not exist
    Voici ma requête :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    public Cursor getStations() {
                return db.rawQuery("SELECT numS as _id, etatCs, nomS  FROM station", null);
            }
    Activity correspondante
    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
    public class StationActivity extends Activity {
        private StationDAO dbHelper;
        private SimpleCursorAdapter dataAdapter;
     
     
        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.station_display);
            dbHelper = new StationDAO(this);
     
     
            dbHelper.open(); // ouverture de la table en lecture/écriture
            dbHelper.addSomedata();
     
     
            //Generate ListView from SQLite Database
            displayListView();
        }
     
        private void displayListView() {
            Cursor cursor = dbHelper.getStations();
            // The desired columns to be bound
            String[] columns = new String[]{StationDAO.STATION_NUM, StationDAO.STATION_ETATCS, StationDAO.STATION_NOM,
     
     
            };
     
            // the XML defined views which the data will be bound to
            int[] to = new int[]{R.id.numS, R.id.etatS, R.id.nomS,
     
            };
     
            dataAdapter = new SimpleCursorAdapter( this, R.layout.station_display, cursor, columns, to, 0 );
     
            ListView listView = (ListView) findViewById( R.id.list );
     
            // Assign adapter to ListView
            listView.setAdapter( dataAdapter );
     
     
        }
     
    }
    La structure de la table & creation,...
    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
    public class StationDAO {
     
     
        private static final String STATION_TABLE_NAME = "station";
     
     
        public static final String STATION_NUM = "numS";
        public static final String STATION_ETATCS = "etatCs";
        public static final String STATION_NOM = "nomS";                                      ////définir la façon dont la base de données sera ...
        public static final String STATION_SITUATION = "situationS";
        public static final String STATION_CAPACITE = "capaciteS";
        public static final String STATION_PRESENCEBORNE = "presenceborneS";
     
     
     
     
        public static final String STATION_TABLE_CREATE = "CREATE TABLE IF NOT EXISTS " +STATION_TABLE_NAME+
                " (" +
     
     
     
                " "+STATION_NUM+ " INTEGER PRIMARY KEY AUTOINCREMENT, " +
                " "+STATION_ETATCS+ " TEXT, " +                                            //implementation
                " "+STATION_NOM+ " TEXT, " +
                " "+STATION_SITUATION+ " TEXT, " +
                " "+STATION_CAPACITE+ " INTEGER , " +
                " "+STATION_PRESENCEBORNE+ " TEXT" +
                ");";

  16. #16
    Expert confirmé
    Avatar de Hephaistos007
    Profil pro
    Enseignant Chercheur
    Inscrit en
    Décembre 2004
    Messages
    2 493
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2004
    Messages : 2 493
    Points : 4 166
    Points
    4 166
    Par défaut
    Probablement que ta table n'existe pas.
    Car dans StationDAO, je ne vois pas d'ordre de création de la moindre table. Moi je vois juste dans chaînes de caractères affectées à des constantes. C'est sympa mais ça ne fait pas avancer le smilblik. Il faut étendre la classe SQLiteOpenHelper pour y arriver.

    Si tu possèdes le script de création SQL de ta table, copies/colles le directement dans cet outil, et tu obtiens un joli SQLiteOpenHelper exempt d'erreurs.
    Il vaut mieux mobiliser son intelligence sur des conneries que mobiliser sa connerie sur des choses intelligentes --- devise SHADOKS

    Kit de survie Android : mon guide pour apprendre à programmer sur Android, mon tutoriel sur les web services et enfin l'outil en ligne pour vous faire gagner du temps - N'oubliez pas de consulter la FAQ Android

  17. #17
    Membre à l'essai
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2017
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2017
    Messages : 29
    Points : 17
    Points
    17
    Par défaut
    Citation Envoyé par Hephaistos007 Voir le message
    Probablement que ta table n'existe pas.
    Car dans StationDAO, je ne vois pas d'ordre de création de la moindre table. Moi je vois juste dans chaînes de caractères affectées à des constantes. C'est sympa mais ça ne fait pas avancer le smilblik. Il faut étendre la classe SQLiteOpenHelper pour y arriver.

    Si tu possèdes le script de création SQL de ta table, copies/colles le directement dans cet outil, et tu obtiens un joli SQLiteOpenHelper exempt d'erreurs.

    Que ce qu'il est génial cet outil !!!! merci beaucoup
    Hephaistos007;9104766
    , je vais refaire etape par etape , je reviens vers toi si j'ai un soucis.

  18. #18
    Membre à l'essai
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2017
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2017
    Messages : 29
    Points : 17
    Points
    17
    Par défaut
    Citation Envoyé par nunuT Voir le message
    Que ce qu'il est génial cet outil !!!! merci beaucoup , je vais refaire etape par etape , je reviens vers toi si j'ai un soucis.
    Bonjour, Je reviens encore une fois ; il me semble de ne pas avoir aucune erreur mais lors de l’exécution je n'ai aucune affichage sur mon terminal, je voudrais vous demander s'il vous plait si vous pourriez faire un tours dans mon code ci-dessous pour voir le pourquoi.
    perso je pense que ça serait peut être une mauvaise insertion des données à tester. je ne sais pas comment je pourrais les tester autrement.

    Ma classe StationDAO :

    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
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    public class StationDAO  {
     
     
        private DatabaseOpenHelper SQLite; // notre gestionnaire du fichier DatabaseOpenHelper
        private SQLiteDatabase db;
     
     
     
     
        public void open() throws SQLException {
            try {
     
            db = SQLite.getWritableDatabase(); ////on ouvre la table en lecture/écriture
        }
            catch (SQLException ex){
                db = SQLite.getReadableDatabase();
            }
            }
        public void close() {
            //on ferme l'accès à la BDD
            db.close();
        }
     
            // Constructeur
            public StationDAO(Context context) {
                SQLite = DatabaseOpenHelper.getInstance(context);
     
     
            }
     
            public long addStation(Station station) {
                // Ajout d'un enregistrement dans la table
     
                ContentValues values = new ContentValues();
                values.put(DatabaseOpenHelper.COLUMN_STATION_ETATCS, station.getEtatCS());
                values.put(DatabaseOpenHelper.COLUMN_STATION_NOM, station.getNomS());
                values.put(DatabaseOpenHelper.COLUMN_STATION_SITUATION, station.getSituation());
                values.put(DatabaseOpenHelper.COLUMN_STATION_CAPACITE, station.getCapacite());
                values.put(DatabaseOpenHelper.COLUMN_STATION_PRESENCEBORNE, station.getPresenceBorne());
     
                // insert() retourne l'id du nouvel enregistrement inséré, ou -1 en cas d'erreur
                return db.insert(DatabaseOpenHelper.TABLE_STATION, null, values);
     
     
     
            }
     
            public int modifStation(Station station) {       // modification d'un enregistrement,// valeur de retour : (int) nombre de lignes affectées par la requête
     
     
                ContentValues values = new ContentValues();
                values.put(DatabaseOpenHelper.COLUMN_STATION_ETATCS, station.getEtatCS());
                values.put(DatabaseOpenHelper.COLUMN_STATION_NOM, station.getNomS());
                values.put(DatabaseOpenHelper.COLUMN_STATION_SITUATION, station.getSituation());
                values.put(DatabaseOpenHelper.COLUMN_STATION_CAPACITE, station.getCapacite());
                values.put(DatabaseOpenHelper.COLUMN_STATION_PRESENCEBORNE, station.getPresenceBorne());
     
                String where = DatabaseOpenHelper.COLUMN_STATION_NUMS +" = ?";
                String[] whereArgs = {station.getNumS()+""};
     
                return db.update(DatabaseOpenHelper.TABLE_STATION, values, where, whereArgs);
            }
     
        public int updatePlotByStation(Plots plot) {
            // modification d'un enregistrement
            // valeur de retour : (int) nombre de lignes affectées par la requête
     
            ContentValues values = new ContentValues();
            values.put(DatabaseOpenHelper.COLUMN_PLOT_ETATCP, plot.getEtatCP());
     
     
            String where = DatabaseOpenHelper.COLUMN_PLOT_NUMS +" = ?";
            String[] whereArgs = {plot.getNumP()+""};
     
            return db.update(DatabaseOpenHelper.TABLE_PLOT, values, where, whereArgs);
        }
     
     
            public int supStation(Station station) {    // suppression d'un enregistrement/  // valeur de retour : (int) nombre de lignes affectées par la clause WHERE, 0 sinon
     
     
                String where = DatabaseOpenHelper.COLUMN_STATION_NUMS +" = ?";
                String[] whereArgs = {station.getNumS()+""};
     
                return db.delete(DatabaseOpenHelper.TABLE_STATION, where, whereArgs);
            }
     
     
     
            public Station getStationParNum(long numS) {      // Retourne la station dont le num est passé en paramètre
     
                Station s =new Station(0, "", "", "",0 , "");
     
                Cursor c = db.rawQuery("SELECT * FROM "+ DatabaseOpenHelper.TABLE_STATION +" WHERE "+ DatabaseOpenHelper.COLUMN_STATION_NUMS +"="+numS, null);
                if (c.moveToFirst()) {
                    s.setNumS(c.getInt(c.getColumnIndex(DatabaseOpenHelper.COLUMN_STATION_NUMS)));
                    s.setEtatCS(c.getString(c.getColumnIndex(DatabaseOpenHelper.COLUMN_STATION_ETATCS)));
                    s.setNomS(c.getString(c.getColumnIndex(DatabaseOpenHelper.COLUMN_STATION_NOM)));
                    s.setSituation(c.getString(c.getColumnIndex(DatabaseOpenHelper.COLUMN_STATION_SITUATION)));
                    s.setCapacite(c.getInt(c.getColumnIndex(DatabaseOpenHelper.COLUMN_STATION_CAPACITE)));
                    s.setPresenceBorne(c.getString(c.getColumnIndex(DatabaseOpenHelper.COLUMN_STATION_PRESENCEBORNE)));
                    c.close();
                }
     
                return s;
            }
     
     
     
            public Cursor getStations() {
                // sélection de tous les enregistrements de la table
                //return db.rawQuery("SELECT * FROM "+STATION_TABLE_NAME, null);
                return db.rawQuery("SELECT NUMS as _id, ETATCS, NOM  FROM STATION", null);
            }
    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
    public class DatabaseOpenHelper extends SQLiteOpenHelper {
     
        private static DatabaseOpenHelper sInstance;
     
        public static final String TABLE_STATION = "STATION";
     
        public static final String COLUMN_STATION_NUMS = "NUMS";
        public static final String COLUMN_STATION_ETATCS = "ETATCS";
        public static final String COLUMN_STATION_NOM = "NOM";
        public static final String COLUMN_STATION_SITUATION = "SITUATION";
        public static final String COLUMN_STATION_CAPACITE = "CAPACITE";
        public static final String COLUMN_STATION_PRESENCEBORNE = "PRESENCEBORNE";
     
        private static final String DATABASE_NAME = "velib.db";
        private static final int DATABASE_VERSION = 1;
     
        // Database creation sql statement
        private static final String DATABASE_CREATE =
     
                "CREATE TABLE "
                + TABLE_STATION + "("  + COLUMN_STATION_NUMS + " VARCHAR ( 4 )  , "
                + COLUMN_STATION_ETATCS + " VARCHAR ( 1 ) , "
                + COLUMN_STATION_NOM + " VARCHAR ( 40 ) , "
                + COLUMN_STATION_SITUATION + " VARCHAR ( 100 ) , "
                + COLUMN_STATION_CAPACITE + " INT NULL , "
                + COLUMN_STATION_PRESENCEBORNE + " VARCHAR ( 1 ) , "
                + " PRIMARY KEY (NUMS) AUTOINCREMENT, ); "
     
                ;
     
        public DatabaseOpenHelper(Context context) {
            super(context, DATABASE_NAME, null, DATABASE_VERSION);
        }
     
        @Override
        public void onCreate(SQLiteDatabase database) {
            database.execSQL(DATABASE_CREATE);
        }
     
        @Override
        public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
            Log.w(DatabaseOpenHelper.class.getName(),
                    "Upgrading database from version " + oldVersion + " to "
                            + newVersion + ", which will destroy all old data");
            db.execSQL("DROP TABLE IF EXISTS " + TABLE_STATION);
     
     
            String sql =
                    "INSERT INTO STATION (ETATCS, NOM, SITUATION, CAPACITE,PRESENCEBORNE) VALUES('courant', 'NomstationTest', 'Fonctionne', 15, 'oui')" ;
            db.execSQL(sql);
     
            onCreate(db);
        }
    activite pour l'affichage.
    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
    public class StationActivity extends ListActivity {
        private StationDAO stationdao;
        private SimpleCursorAdapter dataAdapter;
     
     
        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_list_station);
            stationdao = new StationDAO(this);
     
     
            stationdao.open(); // ouverture de la table en lecture/écriture
     
            //Generate ListView from SQLite Database
            binddata();
        }
     
        private void binddata() {
            Cursor c = stationdao.getStations();
     
            SimpleCursorAdapter adapter = new SimpleCursorAdapter(
                    this,
                    R.layout.activity_list_station,
                    c,
                    new String[]{"NOM", "ETATCS"},
                    new int[]{R.id.tv_nom_station, R.id.tv_etat_station});
     
            getListView().setAdapter(adapter);
    je vous remercie d'avance

Discussions similaires

  1. Réponses: 1
    Dernier message: 23/01/2015, 16h16
  2. Réponses: 2
    Dernier message: 20/09/2011, 09h58
  3. Réponses: 1
    Dernier message: 16/05/2007, 15h54
  4. Recherche Data pour m'exercer en SQL-Query
    Par Oneill dans le forum Décisions SGBD
    Réponses: 1
    Dernier message: 13/10/2004, 11h43
  5. [SQL Server] Error converting data type varchar...
    Par Sir Tengu dans le forum MS SQL Server
    Réponses: 9
    Dernier message: 13/06/2003, 10h46

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