Search code examples
androidadaptersimplecursoradapterandroid-adapter

How to get _ID with SimpleCursorAdapter


So far I got this

  db = new MYDBHelper(this);
    constantsCursor = db.getReadableDatabase().rawQuery(
            "SELECT _ID, title, value " + "FROM constants ORDER BY title", null);
ListAdapter adapter = new SimpleCursorAdapter(this, R.layout.item, constantsCursor, new String[] { DBHelperMen2.TITLE, DBHelperMen2.VALUE }, new int[] {R.id.item_name, R.id.item_points });
listata = (ListView) findViewById(R.id.listView1);
listata.setAdapter(adapter);

But I have one more field named item_number. I this field I want to write the _ID number

How can I do this ?

new SimpleCursorAdapter(this, R.layout.item, constantsCursor, new String[] { **???** ,MYDBHelper.TITLE, MYDBHelper.VALUE }, new int[] {**R.id.item_number** , R.id.item_name, R.id.item_points });

Here is MYDBHelper

public class MYDBHelper extends SQLiteOpenHelper {
    private static final String DATABASE_NAME = "db";
    static final String TITLE = "title";
    static final String VALUE = "value";

    public MYDBHelper(Context context) {
        super(context, DATABASE_NAME, null, 1);
    }

    @Override
    public void onCreate(SQLiteDatabase db) {

        db.execSQL("CREATE TABLE constants (_id INTEGER PRIMARY KEY AUTOINCREMENT, title TEXT, value TEXT);");
    }



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

Solution

  • Simply do this:

    ListAdapter adapter = new SimpleCursorAdapter(this, R.layout.item, constantsCursor, new String[] { DBHelperMen2.ID, DBHelperMen2.TITLE, DBHelperMen2.VALUE }, new int[] {R.id.item_number, R.id.item_name, R.id.item_points });
    

    Where in DBHelperMen2.ID, the ID is the name of the column in your db

    This code should work:

    public class MYDBHelper extends SQLiteOpenHelper {
    private static final String DATABASE_NAME = "db";
    
    static final String TABLE_NAME = "constants";
    static final String ID = "_id";
    
    static final String TITLE = "title";
    static final String VALUE = "value";
    
    public MYDBHelper(Context context) {
        super(context, DATABASE_NAME, null, 1);
    }
    
    @Override
    public void onCreate(SQLiteDatabase db) {
    
        db.execSQL("CREATE TABLE "+ TABLE_NAME + "(" + ID + " INTEGER PRIMARY KEY AUTOINCREMENT, " + TITLE + " TEXT, " + VALUE + " TEXT);");
    }
    
    
    
        @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        db.execSQL("DROP TABLE IF EXISTS " + TABLE_NAME);
        onCreate(db);
    }
    

    }