Android SQLite Error "с запросом имени столбца с именем таблицы"

После выполнения запроса sql формы:

SELECT table_name.column_name FROM table_name,table_name2,etc... WHERE condition1,condition2,etc...,

Я получаю следующую ошибку, которая не закрывает мою программу:

запрос имени столбца с именем таблицы - table_name.column_name

Поиск этой фразы Google привел меня к android.database.sqlite.SQLiteCursor line 314

Несколько строк над строкой 314 есть комментарий, что этот код является ответом на ошибку 903852. Но я не могу найти эту ошибку в google.

Итак, это вопрос из двух частей:

  • Неправильно ли указывать столбец имя с таблицей в SQL? (Я был под впечатлением, что это лучшая практика).
  • Как мне найти   Сообщить об ошибке Android 903852, чтобы я   может понять, в чем проблема?   (ошибка Google google в googling 903852 не   работа)

Ответ 1

В моем случае проблема была решена, когда я использовал

select table_name.column_name as column_name_alt WHERE ....

а затем, в моем CursorAdapter, ссылается на него в массиве строк только как column_name_alt.

Надеюсь, что это поможет.

Ответ 2

Итак, я столкнулся с этой проблемой при создании Cursor, который будет передан в SimpleCursorAdapter. Оказывается, что, пока он ОК, чтобы префикс столбцов "запроса" String [], последующий аргумент String[] from, переданный конструктору SimpleCursorAdapter не требуется префикс для того, чтобы адаптер адаптировал ваш результирующий набор правильно.

Ответ 3

Я обнаружил, что наилучшей практикой является окружение всех имен таблиц и значений условий одиночными кавычками! [Я получал ошибки "неизвестного столбца" в android, даже когда запрос работал в моем автономном менеджере sqlite.]

Ответ 4

Я получил ту же проблему несколько дней назад и решил проблему, используя альтернативный метод. Ранее я использовал следующий метод, чтобы установить курсор на столбец.

String sqlStatement = "SELECT supplierid,suppliercode,suppliername FROM supplierinfo WHERE suppliername  LIKE '%"+query+"%' ";
        cursor = db.rawQuery(sqlStatement,null);
        if (cursor != null && cursor.getCount() > 0){
            if (cursor.moveToFirst()){
                do {
                    int supplierId = cursor.getInt( 0);
                    String supplierCode = cursor.getString(cursor.getColumnIndex( "suppliercode" )) != null ? cursor.getString( cursor.getColumnIndex( "suppliercode" ) ) : "";
                    String supplierName = cursor.getString(cursor.getColumnIndex( "suppliername" )) != null ? cursor.getString( cursor.getColumnIndex( "suppliername" ) ) : "";
                    supplierInfo =  new SupplierInfo();
                    supplierInfo.setSupplierID( supplierId );
                    supplierInfo.setSupplierCode( supplierCode );
                    supplierInfo.setSupplierName( supplierName );
                    supplierInfoList.add(supplierInfo);
                } while (cursor.moveToNext());
            }

После того, как я изменил это на следующий метод, он работал для меня.

String sqlStatement = "SELECT supplierid,suppliercode,suppliername FROM supplierinfo WHERE suppliername  LIKE '%"+query+"%' ";
        cursor = db.rawQuery(sqlStatement,null);
        if (cursor != null && cursor.getCount() > 0){
            if (cursor.moveToFirst()){
                do {
                    int supplierId = cursor.getInt( 0);
                    String supplierCode = cursor.getString(1) != null ? cursor.getString( 1 ) : "";
                    String supplierName = cursor.getString(2) != null ? cursor.getString( 2 ) : "";
                    supplierInfo =  new SupplierInfo();
                    supplierInfo.setSupplierID( supplierId );
                    supplierInfo.setSupplierCode( supplierCode );
                    supplierInfo.setSupplierName( supplierName );
                    supplierInfoList.add(supplierInfo);
                } while (cursor.moveToNext());
            }