Bases de données SQLite .Android

Fermé
amani - Modifié par amani le 18/01/2012 à 20:54
dev-mb Messages postés 2 Date d'inscription lundi 15 octobre 2012 Statut Membre Dernière intervention 8 février 2013 - 6 févr. 2013 à 10:33
Bonjour,


Je suis débutante en Android ma première application consiste à créer des emplois de temps de professeurs qui contient(nom de prof-horaire-et salle).
J'ai créer la classe suivante( création de la base méthodes d'ouverture de fermeture et de la mise à jour de la base ainsi qu'une méthode pour ajouter une ligne à la base.)




public class DataBase {
DatabaseHelper DBHelper;
Context context;
SQLiteDatabase db;

public DataBase(Context context){
this.context = context;
DBHelper = new DatabaseHelper(context);
}

public class DatabaseHelper extends SQLiteOpenHelper{

Context context;

public DatabaseHelper(Context context) {
super(context, "emplois", null, 1);
this.context = context;
}

@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL("create table emplois (_id integer primary key autoincrement, "
+ "nom text not null, heure text not null, "
+ "salle text not null"
+ ");");
}

@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
Toast.makeText(context, "Mise à jour de la Base de données version "+oldVersion+" vers "+newVersion, Toast.LENGTH_SHORT).show();
db.execSQL("DROP TABLE IF EXISTS emplois");
onCreate(db);
}

}

public DataBase open(){
db = DBHelper.getWritableDatabase();
return this;
}

public void close(){
db.close();
}

public void Truncate(){
db.execSQL("DELETE FROM emplois");
}

public long insererSeance(String nom, String heure, String salle){
ContentValues values = new ContentValues();
values.put("nom", nom);
values.put("heure", heure);
values.put("salle", salle);
return db.insert("emplois", null, values);
}


public boolean supprimerSeance(long id){
return db.delete("emplois", "_id="+id, null)>0;
}

public Cursor recupererEmploi(){
return db.query("emplois", new String[]{
"_id",
"nom",
"heure",
"salle"}, null, null, null, null, null);
}

}


j'ai 3 questions:
1.le code précédent est il correct?
2.comment peut on remplir la bases avec quelques exemples à partir de l'émulateur.
3.comment afficher le contenue de la base sous forme d'un tableau sur l'émulateur
A voir également:

2 réponses

Salut,
1/ Je n'ai pas eu le courage de tout lire, dsl :s ni de le tester. L'as tu tester toi même ?
2/ Pour insérer des données, dans l'Activity en question tu fais :
String nom = "Lachaise"
int heure = 22;
String salle = "A132";
dataBase db = new dataBase(this);
db.open();
objetSeance obj = new objSeance(nom,heure,salle);
db.insererSeance(obj);
db.close();

Dans ce que je t'ai écris, j'ai sous entendu que tu avais créer ton objet objetSeance qui contient les getters et setters nom, heure, salle.

3/ Pour afficher ta bdd dans ton activity, tu dois créer un curseur. Tu peux regarder un peu sur google. Si tu as besoin d'aide ou plus de précision, je le ferais avec grand plaisir si cela reste dans mes cordes ^^.

En espérant t'avoir été utile ...

EDIT : Je viens de voir que tu as déjà un curseur dans ton fichier. Dans ta requête SQLITE :db.query, lis bien la doc car tu peux choisir par exemple si tu veux repérer les doublons, etc. Ici ta requete te permet de récupérer tous le contenu de la table 'emploi' je crois. Tu as (j'ai copier coller ton code) :
public Cursor recupererEmploi(){
return db.query("emplois", new String[]{"_id","nom","heure","salle"},
null, null, null, null, null);
return cursorToSeance;
}

Rajoutes ensuite (dans le même fichier) :

private objSeance cursorToSeance(Cursor c){
//si aucun élément n'a été retourné dans la requête, on renvoie null
if (c.getCount() == 0)
return null;
//Sinon on se place sur le premier élément
c.moveToFirst();
objSeance obj= new objSeance ();
//on lui affecte toutes les infos grâce aux infos contenues dans le Cursor
obj.setNom(c.getString(NUM_COL_NOM));
obj.setHeure(c.getInt(NUM_COL_HEURE));
obj.setSalle(c.getString(NUM_COL_SALLE));
//On ferme le cursor
c.close();
return obj;
}

Cette fonction là te permettra de parcourir ce que ta requête SQLITE (db.query) ta trouvé.

Pour les variable NUM_COL_NOM etc, elles se définissent comme ça :
private static final String NUM_COL_NOM = "Nom";
private static final int NUM_COL_NOM = 0;

Pour afficher les valeurs dans ton activity, tu fais appel à la dernière fonction que je t'ai donné.

Hum ... Je pense que j'ai été très très brouillon dans mon explication, dsl, je ne suis pas très doué pour ça. J'espère quand même t'avoir aidé un peu.
2
Grand merci mais j'ai trouvé pleine de difficulté car je suis encore débutante.
Pourquoi vous avez ajouté au curseur que j'ai crée un autre return? c pas logique nn? en plus vous avez utilisé 'objseance' mais j'ai pas créer cette classe.faut 'il la créer.pouvez vous m'aidez par mieux expliquer les choses svp.
0
autre chose: je veux remplir l'emploi depuis le émulateur non pas tester le programme avec le code
0
Salut Amani,
Pour le curseur, effectivement je n'avais pas vu que tu avais fait un return directement sur ta requête SQLite. Dans ce cas là, moi je remplacerais ta fonction par :

public objSeance getobjSeance(){
Cursor c = db.query("emplois", new String[]{"_id","nom","heure","salle"}, null, null, null, null, null);
return cursorToSeance(c);
}

La fonction que je t'ai ajouté pour le curseur va permettre de parcourir ligne par ligne ce que ta requête aura trouvé.

Pour la classe manquante, tu dois créer une classe appelé objSeance et y mettre le code suivant :
public class objSeance {

private String Nom;
private String Heure;
private String Salle;
public objSeance(String nom, String heure, String salle) {
super();
Nom = nom;
Heure = heure;
Salle = salle;
}
public objSeance() {
// TODO Auto-generated constructor stub
}
public String getNom() {
return Nom;
}
public void setNom(String nom) {
Nom = nom;
}
public String getHeure() {
return Heure;
}
public void setHeure(String heure) {
Heure = heure;
}
public String getSalle() {
return Salle;
}
public void setSalle(String salle) {
Salle = salle;
}

}
Tu dois juste rajouter le nom du package en haut, et sans doute changer le type de ta variable "Heure". Je l'ai mis en String mais ça ne doit pas être ça.

Tu dis : "je veux remplir l'emploi depuis le émulateur non pas tester le programme avec le code"
Je comprends pas cette phrase ... :s Si tu veux remplir l'emploie du temps depuis l'émulateur Android, c'est que tu testes ton programme. Non ?
0
Grand merci :)
je veux remplir la base et effacer d'un façon contenue: est ce que je peux créer une interface pour récupérer les 3 champs nom salle et temps puis les insérer ds la base?
De cette manière je peux ajouter des lignes a ma bases quand je veux sans changer le code nn?
0
svp j'ai une autre question
dans cette méthode que vous avez créer
public objSeance getobjSeance(){
Cursor c = db.query("emplois", new String[]{"_id","nom","heure","salle"}, null, null, null, null, null);
return cursorToSeance(c);
}
j'ai pas compris le type de retour.c qui cursorToSeance(c) en fait cette méthode n'est pas définit, comment l'utiliser donc?
0
dev-mb Messages postés 2 Date d'inscription lundi 15 octobre 2012 Statut Membre Dernière intervention 8 février 2013
6 févr. 2013 à 10:33
Bonjour,
Je suis entrain de créer une application qui permet aux étudiants de sauvegarder un emploi du temps, j'ai crée les interfaces suivantes:
1. interface qui permet aux étudiants de choisir la matière, la date , le jour puis les données seront enregistré dans une base de donnée SQLite
2. une interface qui permet d'afficher les données , je veux que les données soient affiché dans un tableau , j'ai crée un tableau avec tablelayout mais je n'arrive pas à le remplir avec les données que je sélectionne à partir de la base .
0