2014-02-12 5 views
0

Я думаю, что я проверил все предыдущие сообщения по этому вопросу, но не похоже, ни один, помогают мне ...Еще один «столбец _id не существует» проблема

Basic материала - пытаются использовать адаптер курсора, связанный с моя база данных, но я получаю:

java.lang.IllegalArgumentException: column '_id' does not exist 

Моя схема имеет тот столбец, определенный (хотя у меня есть 2 таблицы, как с тем же названием - является то, что вопрос?), как это:

public static abstract class dbMain implements BaseColumns { 
    public static final String TABLE_NAME = "mpgMain"; 
    public static final String ENTRY_ID = "_id"; 
    public static final String VEHICLE_NAME = "v_name"; 

} 

public static abstract class dbHistory implements BaseColumns { 
    public static final String TABLE_NAME = "mpgHistory"; 
    public static final String ENTRY_ID = "_id"; 
    public static final String TRIP_DATE = "date"; 

} 

Из других сообщений, Я поставил _id в моем курсоре porjection:

String[] projection = {dbMain.ENTRY_ID, dbMain.VEHICLE_NAME}; 

Cursor mpgCur = mpgDB.query(dbMain.TABLE_NAME, projection, null, null, null, null, null); 

... но тогда моя трассировка стеки дает ту же ошибку, в строке запроса. Если удалить entry_id от проекции, ту же ошибку, но на более поздних моделях инстанцировании адаптер:

String[] fromColumns = {dbMain.VEHICLE_NAME}; 
int[] toViews = {R.id.displayVehicle}; 

SimpleCursorAdapter vehAdapter = new SimpleCursorAdapter(this, 
    R.layout.activity_first_screen, mpgCur, fromColumns, toViews, 0); <--- HERE 

Я также попытался поставить пробел в команде CREATE TABLE, перед полем _ID:

private static final String SQL_CREATE_MAIN_TABLE = 
"CREATE TABLE " + dbMain.TABLE_NAME + " (" + 
    dbMain.ENTRY_ID + " INTEGER PRIMARY KEY AUTOINCREMENT," + 

Любые идеи с благодарностью получили ...

+0

сделал. вы пытаетесь Log.d все имена столбцов курсора? – pskink

+0

'в строке запроса'. Это означает, что таблица не содержит столбца _id. Вероятно, вы добавили его после создания таблицы и не обновили свою таблицу. удаление и повторная установка приложения должны решить эту проблему. – njzk2

+0

Это так, если я только работаю над эмулятором и каждый раз переучиваю? – Nelmo

ответ

0

Если я не ошибаюсь, по реализации BaseColumns, вы не должны указать «_id» в вашей схеме. Просто используйте константу _ID (так, dbMain._ID и dbHistory._ID)

+0

правда, но не имеет отношения к вопросу. Реализация BaseColumns предоставляет только константы. Использование указанных констант зависит от вас. – njzk2

+0

Очень верно. То, что вы прокомментировали на главной должности, имеет смысл. Даже не подумал об этом. – kentarosu

Смежные вопросы