我在Android应用程序的SQLite数据库中创建了一个自定义视图 我在Ubuntu上使用Sqliteman来测试我的SQL语句,然后再把它放到我的应用程序中 我试图在我的观点上做一个简单的选择陈述 select语句在SQLiteman中工作正常但是当我在我的代码中放入相同的语句时会抛出错误。
声明:
select * from item_view where parent_item_id = 0;
视图(转换为Java作为字符串):
"create view if not exists item_view as select " +
"item._id, item.status, item.name, item.position, " +
"item.parent_item_id, item.note_id, item.other_id, " +
"note.contents, other.priority " +
"from item, note, other where item.note_id = note._id and item.other_id = other._id"
错误:
07-16 14:21:15.153: ERROR/AndroidRuntime(5054): Caused by: android.database.sqlite.SQLiteException: no such column: parent_item_id: , while compiling: SELECT * FROM item_view WHERE parent_item_id = 0
我首先尝试在select语句中调用field.parent_item_id字段,但这不起作用。
然后我拉出数据库并用Sqliteman打开它
字段列在原始表中(_id,status,name等)
所以我在Sqliteman中运行了上面的SQL,并且能够检索到相应的数据没有问题,但无论如何我都无法在我的应用程序中使用它。
我还注意到删除视图作为DROP TABLE命令在SQLiteman中工作但在我的应用程序中没有
我想知道我是否可能缺少其他一些VIEW特定的功能
我没有在android文档或任何SQL文档中看到任何内容。
从技术上讲,我可以使用原始表进行更复杂的SQL调用,但我的所有表都遵循某些指导原则,以便我可以动态生成SQL调用。我希望视图表可以保持我的代码统一,并且总是重复使用相同的调用来避免重复代码中的维护和其他错误问题。
答案 0 :(得分:18)
事实证明,您需要专门命名您正在创建的每个字段,以便android可以将其视为常规表。 解决方案......
"create view if not exists item_view as select " +
"item._id as _id, item.status as item_status, item.name as item_name, item.position as item_position, " +
"item.parent_item_id as item_parent_item_id, item.note_id as item_note_id, item.other_id as item_other_id, " +
"note.contents as note_contents, other.priority as other_priority " +
"from item, note, other where item.note_id = note._id and item.other_id = other._id"