【发布时间】:2011-08-28 08:39:30
【问题描述】:
我有一个 Android 应用程序,到目前为止,我的所有测试都是在我的 Froyo 手机上进行的。我刚刚开始在模拟器中针对 1.6 和 2.1 进行测试,它在启动时崩溃了。它在我的一个视图中找不到列。
05-17 23:31:31.446: ERROR/AndroidRuntime(198): Caused by:
android.database.sqlite.SQLiteException: no such column:
categoryTable.currentBal: , while compiling:
SELECT SUM(categoryTable.currentBal) FROM catDisplayTable
WHERE masterCategoryName != "__Hidden__"
视图的架构如下:
CREATE VIEW catDisplayTable AS SELECT categoryTable._id, categoryTable.name,
categoryTable.currentBal, categoryTable.sequence, categoryTable.note,
masterCategoryTable.name AS masterCategoryName FROM categoryTable
LEFT OUTER JOIN masterCategoryTable
ON categoryTable.masterCategoryId = masterCategoryTable._id;
通过adb shell 连接到各种模拟器实例,我已经确认 (1) 在所有情况下都存在正确的架构,并且 (2) 在 1.6 和 2.1 中,SQLite 只是无法找到其中的列视图,即使是像
SELECT categoryTable.name FROM catDisplayTable;
或
SELECT name FROM catDisplayTable;
它在 2.2 上运行良好。
因此,我的假设是 SQLite 在 Android 2.1 和 2.2 之间发生了一些变化。 This answer 提供了每个 Android API 级别附带的 SQLite 版本。它说 SQLite 在 2.1 和 2.2 之间从 3.5.9 更新到 3.6.22。查看the SQLite release history,我没有看到任何可以解释差异的特别明显的东西。
任何人都可以准确地确定发生了什么变化,并建议我如何解决它,以便我的代码可以在 Froyo 之前的设备上运行吗?
【问题讨论】:
-
我只是想确保您没有明显跳过。在尝试之前,您是否在模拟器/设备上“清理过数据”?也许您的开发版本较旧,并且该视图在该模拟器/设备上没有列?
-
@katit 是的,完全干净。我专门创建了新的空 AVD 来测试它。