lundi 14 décembre 2015

database android app crash despite incrementing the database's version

I have a listview and I wanted to display my sql cursor into it but the app crashes when I execute the code :

Caused by: android.database.sqlite.SQLiteException: no such column: _id (code 1): , while compiling: SELECT DISTINCT _id, membername, memberstudylevel, memberbirthday FROM members

This is my java code for the database's class:

package tn.iac.myapp.application10;

import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;

import java.lang.reflect.Member;
import java.util.ArrayList;
import java.util.List;


public class
    MyBDHelter extends SQLiteOpenHelper {
private static final int DATABASE_VERSION = 4;
private static final String DATABASE_NAME = "base_de_membre.db";
public static final String TABLE_MEMBERS = "members";
public static final String COLUMN_MEMBERID = "_id";
public static final String COLUMN_MEMBERNAME = "membername";
public static final String COLUMN_MEMBERSTUDYLEVEL = "memberstudylevel";
public static final String COLUMN_EMAIL = "memberemail";
public static final String COLUMN_MEMBERBIRTHDAY = "memberbirthday";
public static final String COLUMN_PASSWORD = "password";

public MyBDHelter(Context context, String  name,SQLiteDatabase.CursorFactory factory, int version) {
    super(context, DATABASE_NAME, factory, DATABASE_VERSION);
}

@Override
public void onCreate(SQLiteDatabase db) {
    String query = "CREATE TABLE " + TABLE_MEMBERS + "("
            +COLUMN_MEMBERID +"INTEGER PRIMARY KEY,"
            + COLUMN_MEMBERNAME + " TEXT,"
            + COLUMN_MEMBERSTUDYLEVEL + " TEXT, "
            + COLUMN_MEMBERBIRTHDAY + " TEXT, "
            + COLUMN_EMAIL + " TEXT, "
            + COLUMN_PASSWORD + " TEXT);";
    db.execSQL(query);
}

@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion)
{
    db.execSQL("DROP TABLE IF EXISTS " + TABLE_MEMBERS);
    onCreate(db);
}

public Cursor getallusers() {
    SQLiteDatabase db = getReadableDatabase();
    String[] strings = {"_id"," membername", " memberstudylevel", "memberbirthday"};
    Cursor c=db.query(
            true,
            TABLE_MEMBERS,
            strings,
            "",
            null,
            null,
            null,
            null,
            null
    );
    if(c!=null){
    c.moveToFirst();}
    db.close();
    return c;
}

public void addmember(Membre membre) {
    ContentValues values = new ContentValues();
    values.put(COLUMN_MEMBERNAME, membre.get_name());
    values.put(COLUMN_MEMBERBIRTHDAY, membre.get_birth());
    values.put(COLUMN_MEMBERSTUDYLEVEL, membre.get_study_level());
    values.put(COLUMN_PASSWORD, membre.get_password());
    values.put(COLUMN_EMAIL, membre.get_Email());
    SQLiteDatabase db = getWritableDatabase();
    db.insert(TABLE_MEMBERS, null, values);
    db.close();

}

public boolean exist(String name, String password) {
    SQLiteDatabase db = getWritableDatabase();
 String query = "SELECT * FROM " + TABLE_MEMBERS + " WHERE " + COLUMN_MEMBERNAME + "=\"" + name + "\" AND " + COLUMN_PASSWORD + "=\"" + password + "\";";
   Cursor c = db.rawQuery(query, null);
    if (c.getCount() >= 1)
        return true;
    return false;

}

public void changepassword(String password, String oldpassword, String name) {
    SQLiteDatabase db = this.getWritableDatabase();
    String query = "UPDATE " + TABLE_MEMBERS + " SET " + COLUMN_PASSWORD + "=\"" + password + "\" WHERE " + COLUMN_MEMBERNAME + "=\"" + name + "\"AND "
            + COLUMN_PASSWORD + "=\"" +
            oldpassword + "\";";
    db.execSQL(query);
    db.close();
}

public Membre databasetostring(String password) {
    SQLiteDatabase db = this.getReadableDatabase();

    Cursor cursor = db.query(TABLE_MEMBERS, new String[]{COLUMN_MEMBERNAME,
                    COLUMN_EMAIL, COLUMN_MEMBERSTUDYLEVEL, COLUMN_MEMBERBIRTHDAY, COLUMN_PASSWORD}, COLUMN_PASSWORD + "=?",
            new String[]{password.toString()}, null, null, null);
    if (cursor != null)
        cursor.moveToFirst();
    Membre membre = new Membre(cursor.getString(0), cursor.getString(1), cursor.getString(2), cursor.getString(3), cursor.getString(4));

    return membre;
}
}

And this is my code to show the listview:

package tn.iac.myapp.application10;

import android.database.Cursor;
import android.os.Bundle;
import android.support.v7.app.ActionBarActivity;
import android.widget.ListView;
import android.widget.SimpleCursorAdapter;

public class List_user extends ActionBarActivity {
ListView listView;
MyBDHelter bdHelter;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_list_user);
    listView = (ListView) findViewById(R.id.listView);
    bdHelter = new MyBDHelter(getApplicationContext(), null, null, 4);
    Cursor cursor = bdHelter.getallusers();
    int[] toviews = {R.id.user_id_item, R.id.name_item_user, R.id.studylevell_user_item, R.id.birthday_userèitem};
    String[] strings = {"_id", " membername", "memberstudylevel", "memberbirthday"};
    SimpleCursorAdapter simpleCursorAdapter = new SimpleCursorAdapter(getApplicationContext(), R.layout.user_item, cursor,
            strings, toviews);
    listView.setAdapter(simpleCursorAdapter);

}}

PS: I declared the primary key "_id", and I incremented the database's version, but the problem still exists

Aucun commentaire:

Enregistrer un commentaire