Android 列“objectId”不存在异常(仅在emulator中)

Android 列“objectId”不存在异常(仅在emulator中),android,database,Android,Database,我的应用程序有一个非常奇怪的问题,我不知道为什么它只发生在emulator中。我使用的是一个自定义的数据库助手类,没有任何问题。但我经常使用的数据库表中的特定列有一个问题。因此,根据我从父活动发送的一些额外信息,我正在运行不同的sql语句。以下是我正在使用的: String sql = ""; switch (sort) { case 1: if (extra != 0) { sql = "SELECT DISTINCT c

我的应用程序有一个非常奇怪的问题,我不知道为什么它只发生在emulator中。我使用的是一个自定义的数据库助手类,没有任何问题。但我经常使用的数据库表中的特定列有一个问题。因此,根据我从父活动发送的一些额外信息,我正在运行不同的sql语句。以下是我正在使用的:

String sql = "";
    switch (sort) {
    case 1:
            if (extra != 0) {
                sql = "SELECT DISTINCT c.objectId FROM cards AS c "
                        + "INNER JOIN cardtags AS ct "
                        + "ON (c.objectId=ct.cardId) "
                        + "WHERE c.collectionId=" 
                        + collId 
                        + " AND c.repeatsCount>0"+ " AND ct.tagId="
                        + extra;

            } else if (extra == 0) {
                sql = "SELECT DISTINCT c.objectId FROM cards AS c "
                        + "INNER JOIN cardtags AS ct "
                        + "ON (c.objectId=ct.cardId) "
                        + "WHERE c.collectionId=" 
                        + collId 
                        + " AND c.repeatsCount>0";
            }
        break;
    case 2:
            if (extra != 0) {
                sql = "SELECT DISTINCT cd.objectId FROM cards AS cd "
                        + "INNER JOIN categories AS ct "
                        + "ON (cd.categoryId=ct.objectId) "
                        + "WHERE cd.collectionId=" 
                        + collId
                        + " AND ct.objectId=" 
                        + extra 
                        + " AND cd.repeatsCount>0";

            } else if (extra == 0) {
                sql = "SELECT DISTINCT cd.objectId FROM cards AS cd "
                        + "INNER JOIN categories AS ct "
                        + "ON (cd.categoryId=ct.objectId) "
                        + "WHERE cd.collectionId=" 
                        + collId 
                        + " AND cd.repeatsCount>0";
            }
        break;
    case 3:
            String AscDesc = "";
            if (ascDesc == 0) {
                AscDesc = "ASC";
                sql = "SELECT DISTINCT objectId FROM cards "
                        + "WHERE collectionId="
                        + collId 
                        + " AND repeatsCount>0"
                        + " ORDER BY dateCreated "
                        + AscDesc;

            } else if (ascDesc != 0) {
                AscDesc = "DESC";
                sql = "SELECT DISTINCT objectId FROM cards  "
                        + "WHERE collectionId="
                        + collId 
                        + " AND repeatsCount>0"
                        + " ORDER BY dateCreated "
                        + AscDesc;
            }
        break;
    }
    Cursor myCursor = userDbHelper.executeSQLQuery(sql);
    if (myCursor.getCount() == 0) {
        myCursor.close();
    } else if (myCursor.getCount() > 0) {
        myCardID = new ArrayList<Integer>();
        myCardID.clear();
        for (myCursor.move(0); myCursor.moveToNext(); myCursor.isAfterLast()) {
            int cardId1 = myCursor.getInt(myCursor.getColumnIndexOrThrow("objectId"));
            myCardID.add(cardId1);
        }
    }
当我尝试启动这个活动时,它只会在EMULATOR中抛出一个异常,在真实的设备上——HTC Desire、HTC EVO 3D并没有问题

11-30 14:51:18.899:E/AndroidRuntime14818:原因:java.lang.IllegalArgumentException:列“objectId”不存在

联机:int cardId1=myCursor.getIntmyCursor.getColumnIndexOrThrowobjectId

但奇怪的是,当我从emulator下载数据库文件并打开它时,我可以清楚地看到我在那里有一个列objectId,我也在其他文件中使用该列,但它并没有引发异常。所以我想知道这是某种模拟器错误,因为我在设备上没有得到类似的东西,或者可能我做错了什么


有什么想法吗?

问题是select语句中列的别名。只有在案例3中,游标才实际包含名为objectId的列,因此当您执行myCursor.getColumnIndexOrThrowobjectId时,它会引发异常


在案例1中,光标中的列是c,在案例2中是cards

您是否尝试过重新创建/升级数据库?我在每个应用程序启动时都会创建数据库,当我查看sqlite文件时,我可以看到列objectId。您是否尝试过枚举列名以查看光标中的实际内容?在某些情况下,objectId是否可以称为“c.objectId”?onCreate事件仅在首次创建数据库时调用,但并不总是如此,因此,您可以尝试从emulator卸载应用程序,然后重新安装它。在某些情况下,我使用的是c.objectId,但它在设备上没有显示错误,据我所知,它不应该在那里引发异常。