Karly Posté(e) 17 mars 2012 Share Posté(e) 17 mars 2012 Salut à tous, j'essaye d'utiliser une base de données sqlite mais j'ai un petit probleme au niveau d'une de mes méthodes ou la requete ne passe pas ... je ne comprend pas bien le probleme voici le code de ma dbhelper : public class DatabaseHelper extends SQLiteOpenHelper{ static final String dbName = "DB_snsr"; // nom de la bdd private static final int DATABASE_VERSION = 1; // Version BDD (a incrémenter lorsque l'on modifie sa BDD) /* TABLE USER */ static final String userTable = "Users"; static final String colUserID = "UserID"; static final String colLogin = "UserLogin"; static final String colPwd = "UserPwd"; public DatabaseHelper(Context context) { super(context, dbName, null,DATABASE_VERSION); } public void onCreate(SQLiteDatabase db) { // TODO Auto-generated method stub db.execSQL("CREATE TABLE " + userTable + " (" + colUserID + " INTEGER PRIMARY KEY AUTOINCREMENT, " + colLogin + " TEXT, " + colPwd + " TEXT)"); // Inserts pre-defined user InsertPreUser(db); } void InsertPreUser(SQLiteDatabase db) { // TODO Auto-generated method stub ContentValues cv = new ContentValues(); cv.put(colUserID, 1); cv.put(colLogin, "Karl"); cv.put(colPwd, "Karl"); db.insert(userTable, colUserID, cv); } public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { // TODO Auto-generated method stub db.execSQL("DROP TABLE IF EXISTS " + userTable); onCreate(db); } } ensuite j'ai une classe USER ou je veux mettre des méthodes static pour pouvoir interagir avec la base de données : public class User { private long id; private String login; private String pwd; /* TABLE USER */ static final String userTable = "Users"; static final String colUserID = "UserID"; static final String colLogin = "UserLogin"; static final String colPwd = "UserPwd"; // //////////////// /* Constructeur */ // //////////////// public User(long id, String login, String pwd) { this.id = id; this.login = login; this.pwd = pwd; } // //////////////////// /* Getter et Setter */ // //////////////////// public long getId() { return id; } public void setId(long id) { this.id = id; } public String getLogin() { return login; } public void setLogin(String login) { this.login = login; } public String getPwd() { return pwd; } public void setPwd(String pwd) { this.pwd = pwd; } // //////////////////// /* METHODES */ // //////////////////// public static long VerifUser4(Context con) { DatabaseHelper dbh=new DatabaseHelper(con); SQLiteDatabase db= dbh.getWritableDatabase(); Cursor c = db.rawQuery("Select * from "+ userTable, null); long x= c.getCount(); db.close(); return x; // valeur impossible } // Static comme ca on doit pas instancier l'objet pour utiliser la fonction public static String VerifUser2(Context con) { DatabaseHelper dbh=new DatabaseHelper(con); SQLiteDatabase db= dbh.getWritableDatabase(); Cursor c = db.rawQuery("Select * from "+ userTable, null); if (c != null && c.getCount() > 0) { String x = c.getString(c.getColumnIndex(DatabaseHelper.colLogin)); try{ return x; }catch(Exception e){ return "foirage";} } db.close(); return "blabla"; } } ma méthode VerifUser4 renvoie bien "1" donc il y a bien des données dans ma BDD parcontre je recois cette erreur avec verifUser2 : android.database.CursorIndexOutOfBoundsException: Index -1 requested, with a size of 1 Donc un probleme a ce niveau là : c.getColumnIndex(DatabaseHelper.colLogin) mais il me parait logique de mettre "DatabaseHelper.colLogin" que j ai vu dans mal d'exemples ... Sinon je sais que le plus simple serait de mettre ma méthode dans le Dbhelper mais vu qu'il y aura beaucoup plus de table et donc beaucoup plus de méthode, j préfère les mettre dans les bonne classe directement ... Est ce que quelqu'un aurait une solution ?? Merci d'avance ! Lien vers le commentaire Partager sur d’autres sites More sharing options...
chpil Posté(e) 18 mars 2012 Share Posté(e) 18 mars 2012 Quand on récupère un Cursor, celui-ci est positionné avant la première ligne. Il faut donc le positionner sur la première ligne avant de récupérer une donnée Donc, dans ton code (classe User), avant String x = c.getString(c.getColumnIndex(DatabaseHelper.colLogin)); il faut que tu rajoutes c.moveToFirst(); Lien vers le commentaire Partager sur d’autres sites More sharing options...
Karly Posté(e) 18 mars 2012 Auteur Share Posté(e) 18 mars 2012 Merci ! Dire que j'ai galéré pendant un bon bout de temps alors que j avais déjà utilisé ce code ! Je pensais qu on l utilisait que pour récupérer plusieurs données dans une boucles :P Encore merci ! Lien vers le commentaire Partager sur d’autres sites More sharing options...
Recommended Posts
Archivé
Ce sujet est désormais archivé et ne peut plus recevoir de nouvelles réponses.