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 ?