运行表单的SQL查询后:
SELECT table_name.column_name FROM table_name,table_name2,etc... WHERE condition1,condition2,etc...,
我收到以下错误,但没有关闭我的程序:
请求具有表名的列名 - table_name.column_name
谷歌搜索此错误短语导致我android.database.sqlite.SQLiteCursor line 314
第314行以上的几行有一条评论说这段代码是对错误903852的回应。但我似乎无法在谷歌上找到这个错误。
所以这是一个两部分问题:
答案 0 :(得分:10)
就我而言,当我使用
时,问题就解决了select table_name.column_name as column_name_alt WHERE ....
以后,在我的CursorAdapter
中,在字符串数组中仅将其称为column_name_alt
。
希望这有帮助。
答案 1 :(得分:6)
因此,我在创建将传递给Cursor
的{{1}}时遇到了此问题。事实证明,虽然可以在“查询”列String []前加上前缀,但是传递给SimpleCursorAdapter
constructor的后续SimpleCursorAdapter
参数不需要为前缀添加前缀适配器以正确映射结果集。
答案 2 :(得分:2)
几天前我遇到了同样的问题,并使用其他方法解决了该问题。以前,我使用以下方法将光标设置为指向列。
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());
}
答案 3 :(得分:0)
我发现最佳做法是用单引号括住所有表名和条件值! [即使查询在我的独立sqlite管理器中有效,我在android中也会收到'未知列名'错误。]