Android-исключение sqlite: java.lang.IllegalArgumentException: столбец '_id' не существует - PullRequest
3 голосов
/ 14 июля 2010

Я создал базу данных sql lite со следующими столбцами:

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);");
    }

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

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);

но я получаю следующее исключение:

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

в таблице базы данных нет столбца с именем '_id'

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

Спасибо

Ответы [ 6 ]

8 голосов
/ 15 июля 2010

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

выберите EmpId в качестве _id

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

спасибо

4 голосов
/ 14 июля 2010

При использовании адаптера в таблице всегда должен быть столбец первичного ключа с именем "_id"

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

static final String colID="EmployeeID"; 

на

static final String colID="_id"; 

Ура!

1 голос
/ 22 марта 2013

Попробуйте вот так

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.
1 голос
/ 14 июля 2010

CursorAdapter s требуется столбец INTEGER PRIMARY KEY с именем _id (доступно из BaseColumns ).

0 голосов
/ 24 июня 2013

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

0 голосов
/ 18 апреля 2013

Я попытался _id (нижний регистр) вместо _ID (верхний регистр) решает проблему.Обязательно заново создайте БД с помощью _id (в нижнем регистре)

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...