Android SQLite错误“请求具有表名的列名”

时间:2011-04-09 05:17:53

标签: android sqlite

运行表单的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的回应。但我似乎无法在谷歌上找到这个错误。

所以这是一个两部分问题:

  1. 命名列是错误的 在SQL中使用表格命名? (我曾是 在这种印象下 最佳实践)
  2. 我如何找到     Android错误报告903852让我     能明白这是什么问题吗?     (谷歌搜索Android错误903852没有     工作)

4 个答案:

答案 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中也会收到'未知列名'错误。]