我的應用程序出現了一個非常奇怪的問題,我不知道它爲什麼會發生(僅在模擬器中)。我正在使用自定義的數據庫輔助類,我沒有任何問題。但是我真的經常使用數據庫表中特定列的問題。因此,根據我從父級活動發送的一些extras
,我正在運行不同的sql語句。下面是我使用的是什麼:列'objectId'不存在異常(僅在模擬器中)
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);
}
}
當我嘗試啓動這個活動它拋出我的異常(僅在模擬器,在真實的設備 - 的HTC Desire,HTC EVO 3D是沒有問題的)
"11-30 14:51:18.899: E/AndroidRuntime(14818): Caused by: java.lang.IllegalArgumentException: column 'objectId' does not exist"
在線:int cardId1 = myCursor.getInt(myCursor.getColumnIndexOrThrow("objectId"));
但奇怪的事情是,當我從仿真器下載數據庫文件並打開它,我可以清楚地看到,我有柱objectId
那裏,我使用該列在其他文件也是,但它並沒有拋出我的例外。所以我想知道它是一種模擬器錯誤,因爲我沒有在設備上得到這樣的東西,或者我做錯了什麼。
任何想法?
您是否嘗試過重新創建/升級數據庫? –
我在每個應用程序開始創建數據庫,當我看着sqlite文件時,我可以看到有'objectId'列。 –
您是否嘗試過枚舉列名以查看實際獲得的光標?在某些情況下,objectId可能被稱爲'c.objectId'? – njzk2