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 :

Problème Base de Donnée sur plusieurs Activités


Sujet :

Android

  1. #1
    Membre confirmé
    Homme Profil pro
    Développeur Web
    Inscrit en
    Janvier 2013
    Messages
    139
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Janvier 2013
    Messages : 139
    Points : 459
    Points
    459
    Par défaut Problème Base de Donnée sur plusieurs Activités
    Bonjour à tous !



    Je développe une application avec une base de donnée et j'ai un "petit" problème....



    En gros j'arrive à accéder à ma base de donnée que depuis une seule de mes activités. Sauf que j'ai besoin d'accéder depuis plusieurs activités.

    Et là, problème. J'ai une activité où j'ai accès correctement à ma base de données.

    Sur les autres, je n'ai rien : le count me retourne 1 objet (j'en ai 91 dedans), et il me retourne aucune donnée cohérente.



    Pour gérer ma classe, j'utilise un ensemble de 2classes : La première est une dérivée de SQLiteOpenHelper, la seconde me permet de manipuler la première :

    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
    public final class BtcDb extends SQLiteOpenHelper
    { 
    	public BtcDb(Context context, String name, CursorFactory factory, int version) 
    	{
    		super(context, name, factory, version);
    	}
     
    	@Override
    	public void onCreate(SQLiteDatabase db)
    	{	
    		// TODO Auto-generated method stub
    		Log.d("BTC","Db created");
    	}
     
    	@Override
    	public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion)
    	{
    		// TODO Auto-generated method stub
    		//db.execSQL("DROP TABLE "+ TABLE_PRODUITS +";");
    		//onCreate(db);
    	}
     
    }
    La seconde :

    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
    public final class DbHelper
    {
    	public static int version=1;
    	private static final String nomDb="basesqlite.db";
     
    	private int num_id=0;
    	private int num_tension=1;
    	private int num_typeRacc=2;
    	private int num_nbCond=3;
    	private int num_technique=4;
    	private int num_typeConn=5;
    	private int num_conn=6;
    	private int num_desiConn=7;
    	private int num_refProd=8;
    	private int num_desiProd=9;
    	private int num_diamMin=10;
    	private int num_diamMax=11;
    	private int num_section=12;
    	private int num_diamConnMax1=13;
    	private int num_diamConnMax2=14;
    	private int num_diamConnMax3=15;
    	private int num_diamConnMax4=16;
    	private int num_diamConnMax5=17;
     
    	private String tableProduits = "produit";
     
    	private SQLiteDatabase bdd;
    	private BtcDb btcDb1;
     
    	public DbHelper(Context context)
    	{
    		btcDb1=new BtcDb(context,nomDb,null,version);
    	}
     
    	public void open()
    	{
    		bdd=btcDb1.getReadableDatabase();
    	}
    	public void close()
    	{
    		bdd.close();
    	}
    	public SQLiteDatabase getBdd()
    	{
    		return bdd;
    	}
     
    	public BtcProduit getProduitByReference(String reference)
    	{
    		String request = "SELECT * FROM \""+tableProduits+"\" WHERE Ref_Produit = \""+reference+"\";";
     
    		Cursor c=bdd.rawQuery(request, null);
    		return cursorToProduit(c);
    	}
     
    	public int getCountDb()
    	{
    		Cursor c = bdd.rawQuery("SELECT COUNT(*) FROM"+ tableProduits, null);
     
    		return cursorToCount(c);
    	}
     
    	public int getCountCriteria(String colonne)
    	{
    		Cursor c = bdd.rawQuery("SELECT COUNT(DISTINCT \""+colonne+"\") FROM"+ tableProduits, null);
     
    		return cursorToCount(c);
    	}
    	public String[] getCriteria(String colonne)
    	{
    		int count = getCountCriteria(colonne);
    		Cursor c = bdd.rawQuery("SELECT DISTINCT "+colonne+" FROM"+ tableProduits+"", null);
    		String[] criteria = new String[count];
    		c.moveToFirst();
    		for(int i=0;i<count;i++)
    		{
    			criteria[i]=c.getString(0);
    			c.moveToNext();
    		}
    		c.close();
     
    		return criteria;
    	}
     
    	public BtcProduit cursorToProduit(Cursor c)
    	{
    		if(c.getCount()==0)
    		{
    			return null;
    		}
    		c.moveToFirst();
    		BtcProduit produit=new BtcProduit();
    		produit.setId(c.getInt(num_id));
    		produit.setTension(c.getString(num_tension));
    		produit.setType_Racc(c.getString(num_typeRacc));
    		produit.setNb_Cond(c.getString(num_nbCond));
    		produit.setTechnique(c.getString(num_technique));
    		produit.setType_Connectique(c.getString(num_typeConn));
    		produit.setConnectique(c.getString(num_conn));
    		produit.setDesi_Connectique(c.getString(num_desiConn));
    		produit.setRef_Produit(c.getString(num_refProd));
    		produit.setDesi_Produit(c.getString(num_desiProd));
    		produit.setDiam_Min(c.getString(num_diamMin));
    		produit.setDiam_Max(c.getString(num_diamMax));
    		produit.setSection(c.getString(num_section));
    		produit.setDiam_Connectique_Max_1(c.getString(num_diamConnMax1));
    		produit.setDiam_Connectique_Max_2(c.getString(num_diamConnMax2));
    		produit.setDiam_Connectique_Max_3(c.getString(num_diamConnMax3));
    		produit.setDiam_Connectique_Max_4(c.getString(num_diamConnMax4));
    		produit.setDiam_Connectique_Max_5(c.getString(num_diamConnMax5));	
    		c.close();
     
    		return produit;
    	}
    	public int cursorToCount(Cursor c)
    	{
    		c.moveToFirst();
    		int i=c.getInt(0);
     
    		return i;
    	}
    }


    Voilà mes 2classes.

    Dans mes activités, je les appelle toujours de la même manière :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    DbHelper dbHelper1 = new DbHelper(this);
    dbHelper1.open();
    //Appel des fonctions de requêtes genre getCountDb();
    dbHelper1.close();


    Visiblement la base de donnée est bien créée, le fichier existe, vu que j'y accède sans aucun problème depuis une activité (que ce soit le getCountDb() ou le getProduitByReference(), les autres rien à faire.
    J'ai testé en modifiant la méthode open(), en lui faisant appeler getWritableDatabase() au lieu de Readable (d'façons Writable permet de lire aussi et j'ai besoin que de lire, pas d'écrire).





    Quelqu'un a déjà été confronté à ce problème et l'a-t-il résolu ? Comment ?

  2. #2
    Membre régulier
    Homme Profil pro
    Architecte de base de données
    Inscrit en
    Février 2013
    Messages
    53
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Norvège

    Informations professionnelles :
    Activité : Architecte de base de données
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2013
    Messages : 53
    Points : 78
    Points
    78
    Par défaut
    tu dois passer le context essai DbHelper dbHelper1 = new DbHelper(getContext().getApplicationContext ());

    voir ici

    http://android.okhelp.cz/get-context...droid-example/

  3. #3
    Expert éminent

    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Février 2007
    Messages
    4 253
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2007
    Messages : 4 253
    Points : 7 618
    Points
    7 618
    Billets dans le blog
    3
    Par défaut
    Un contexte suffit ! donc jutse "getContext()" devrait être suffisant !
    N'oubliez pas de cliquer sur mais aussi sur si un commentaire vous a été utile !
    Et surtout

Discussions similaires

  1. configurer l'accès à votre base de données sur plusieurs postes ?
    Par gattal elhachmi dans le forum Développement
    Réponses: 0
    Dernier message: 28/06/2010, 11h14
  2. Réponses: 1
    Dernier message: 05/03/2008, 17h52
  3. Réponses: 8
    Dernier message: 11/10/2006, 17h28
  4. [ODBC] [DB2] Problème de connexion à une base de données sur un as400 via PHP sous Linux
    Par boo64 dans le forum PHP & Base de données
    Réponses: 16
    Dernier message: 19/04/2006, 09h51

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