Android 2.1和2.2之间的SQLite差异

我有一个Android应用程序,到目前为止我所有的testing都在我的Froyo手机上。 我刚刚在模拟器中开始testing1.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只是无法find这个视图中的列,即使像…一样简单

 SELECT categoryTable.name FROM catDisplayTable; 

要么

 SELECT name FROM catDisplayTable; 

它工作得很好,在2.2。

因此我推测在Android 2.1和2.2之间的SQLite中已经发生了一些变化。 这个答案有助于提供每个Android API级别附带的SQLite版本。 它说SQLite从3.5.9更新到3.6.22 2.1和2.2之间。 看看SQLite的发布历史 ,我没有看到任何特别明显的东西可以解释不同之处。

任何人都可以确切地确定发生了什么变化,并build议我如何解决这个问题,这样我的代码就可以在Pre-Froyo设备上运行了吗?

Solutions Collecting From Web of "Android 2.1和2.2之间的SQLite差异"

我在我的应用程序中有完全相同的问题。 共同点是我也使用Views和外键。

我已经从模拟器下载了我的数据库。 在Android OS 2.1之外运行查询没有任何问题。

给了mp2526的答案,但“columnx AS columnx”查询没有任何区别。 我会尝试隔离这个问题。

在使用DISTINCT时,我遇到了SQLite的一个问题,这个问题也许和你遇到的问题是一样的。

在早期的操作系统版本,使用DISTINCT时,我不得不别名的列名或逻辑将失败,如果不完全相同的错误(我不记得确切的错误是什么),但我想他们在稍后修复它OS版本。

 SELECT DISTINCT _id AS _id, test AS test FROM table 

适用于所有操作系统版本

 SELECT DISTINCT _id, test FROM table 

对于较早的操作系统将会失败

刚刚遇到同样的问题。 当我使用Column AS Column符号重新查看声明时,它会工作。

问题是,Android 2.1返回列与他们的表名,所以像一个查询

 SELECT id FROM table 

将返回一个名字为table.id

正如已经指出的那样,解决scheme就是写出来

 SELECT id as id FROM table