Android SQLite Ошибка «запрос имени столбца с именем таблицы» - PullRequest
12 голосов
/ 09 апреля 2011

После запуска 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 314

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

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

  1. Не правильно ли называть имя столбца таблицей в SQL?(У меня сложилось впечатление, что это лучшая практика)
  2. Как найти отчет об ошибке Android 903852, чтобы понять, в чем проблема?(поиск в Google Android 903852 не работает)

Ответы [ 4 ]

10 голосов
/ 14 августа 2011

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

select table_name.column_name as column_name_alt WHERE ....

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

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

6 голосов
/ 03 мая 2011

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

2 голосов
/ 14 декабря 2018

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

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());
            }
0 голосов
/ 21 апреля 2011

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

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