我有一个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__"
Run Code Online (Sandbox Code Playgroud)
视图的架构如下:
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;
Run Code Online (Sandbox Code Playgroud)
通过adb shell连接到各种模拟器实例,我已经确认(1)在所有情况下都有正确的模式,(2)在1.6和2.1中,SQLite无法在此视图中找到列,即使是简单如
SELECT categoryTable.name FROM catDisplayTable;
Run Code Online (Sandbox Code Playgroud)
要么
SELECT name FROM catDisplayTable;
Run Code Online (Sandbox Code Playgroud)
它在2.2上工作正常.
因此,我的假设是在Android 2.1和2.2之间的SQLite中发生了一些变化.这个答案有助于提供每个Android API级别附带的SQLite版本.它说SQLite在2.1和2.2之间从3.5.9更新到3.6.22.看看SQLite发布历史,我没有看到任何特别明显可能解释其差异的内容.
任何人都可以确切地确定改变了什么,并建议我如何解决它,以便我的代码适用于Froyo之前的设备?
在使用DISTINCT时,我遇到了SQLite的问题,这可能与您遇到的问题相同.
在使用DISTINCT的早期操作系统版本中,我不得不对列名称进行别名,否则逻辑将失败并出现类似但不完全相同的错误(我不记得确切的错误是什么),但我想他们会在以后修复它OS版本.
例
SELECT DISTINCT _id AS _id, test AS test FROM table
Run Code Online (Sandbox Code Playgroud)
适用于所有操作系统版本
SELECT DISTINCT _id, test FROM table
Run Code Online (Sandbox Code Playgroud)
早期的操作系统会失败
我的应用程序中也有完全相同的问题。共同点是我也使用视图并且有外键。
我已经从模拟器下载了我的数据库。我在 Android OS 2.1 之外运行查询没有任何问题。
尝试了 mp2526 的答案,但使用“columnx AS columnx”查询没有任何区别。我会尝试隔离这个问题。
| 归档时间: |
|
| 查看次数: |
1952 次 |
| 最近记录: |