2010-07-14 4 views
3

Я создал базу данных SQL облегченный со следующими столбцами:андроид SQLite исключение: java.lang.IllegalArgumentException: колонка '_id' не существует

static final String dbName="demoDB"; 
    static final String tableName="Employees"; 
    static final String colID="EmployeeID"; 

затем

public void onCreate(SQLiteDatabase db) { 
     // TODO Auto-generated method stub 
     db.execSQL("CREATE TABLE "+tableName+" ("+colID+" INTEGER PRIMARY KEY AUTOINCREMENT, "+ 
       colName+" TEXT, "+colAge+" Integer);"); 
    } 

Я хочу, чтобы выбрать все записи в базе данных, подобные этому, и отображать их в виде сетки:

SQLiteDatabase db=this.getWritableDatabase(); 
     Cursor cur= db.rawQuery("Select "+colName+", "+colAge+" from "+tableName, new String [] {}); 

String [] from=new String []{DatabaseHelper.colName,DatabaseHelper.colAge}; 
      int [] to=new int [] {R.id.colName,R.id.colAge}; 
      SimpleCursorAdapter sca=new SimpleCursorAdapter(this,R.layout.gridrow,c,from,to); 


     GridView grid=(GridView)findViewById(R.id.grid); 
     grid.setAdapter(sca); 

но я получаю следующий ex ception:

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

таблица БД не имеет столбец с именем «_id»

так, что не так с этим кодом

Благодаря

+0

Возможный дубликат [IllegalArgumentException: столбец «_id» не существует при вызове SimpleCursorAdaptor] (http://stackoverflow.com/questions/3236203/illegalargumentexception-column-id-does-not-exist-when-call- to-simplecursora) – Pentium10

+0

Просто потому, что другой поток не дает ответа, не означает, что это не дубликат. –

ответ

8

обходной путь для этой проблемы заключается в использовании выбора Постулатов как этого

выберите EmpId в _ID

причины адаптер требует столбца с именем _id, как вы сказали

благодаря

4

При использовании адаптера, ваш стол должен всегда имеют колонку основного ключа под названием «_id»

Просто сменить

static final String colID="EmployeeID"; 

в

static final String colID="_id"; 

Ура!

1

Пробег:

SELECT _ID as _ID,_ID as _id , cont_type ,.... FROM DATABASE_TABLE ; 

When _ID only ,Message is column '_id' does not exist. 
When _id only ,Message is column '_ID' does not exist. 
+0

Tanx.be полезно. –

0

Я попробовал _id (нижний регистр) вместо _ID (Uppercase), решает проблему. Убедитесь в том, чтобы воссоздать DB еще раз с _id (в нижнем регистре)

Большое спасибо

0

Если загрузка базы данных из активов: После того, как вы Changde свой идентификатор в _ID в базовой базе данных таблицы, и ваши загрузки это из папки с файлами, в которую вы сначала удаляете приложение, иначе вы будете использовать свою старую базу данных.

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