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