我有一个带有不同列的表“ Items”,但是我没有在每个列中分配一个名称。现在,此表中有不同的行,我想执行:
ItemsDao.queryBuilder().where().eq(Items.NAME, "computer").query();
但是我的专栏没有名字。我试图用“ alter table”更新我的表,但是它不起作用。
AnyBody知道如何在不丢失信息的情况下添加列名吗?
谢谢
最佳答案
编辑:
抱歉,现在我明白了这个问题。您是说您没有为每个字段指定columnName = "..."
,因此您现在在QueryBuilder
上遇到了问题。
尽管建议使用columnName
,但无需QueryBuilder
即可使其正常工作。您应该能够返回到字段并添加与现有架构匹配的columnName
静态变量。例如,如果数据库中的字段为"items"
,则只需将columnName = "items"
添加到Java字段中。我不认为Sqlite在列名方面区分大小写,但也应匹配大小写。
但是您不需要columnName
。如果您在数据库中的字段名称是"items"
,那么您应该可以执行以下操作:
itemsDao.queryBuilder().where().eq("items", "computer").query();
如果您编辑问题以显示架构和从
QueryBuilder
获取的异常,我将能够做出更具体的答复。我相信您应该能够做到:
dao.executeRaw("ALTER TABLE `items` ADD COLUMN name VARCHAR;");
那对你不起作用吗? ORMLite文档中有关于在Android下更新架构的部分:
http://ormlite.com/docs/upgrade-schema
要引用它,在更改架构时需要更改数据库版本,然后在
onUpgrade(...)
方法中执行以下操作:Dao<Account, Integer> dao = getHelper().getAccountDao();
// change the table to add a new column named "age"
dao.executeRaw("ALTER TABLE `account` ADD COLUMN age INTEGER;");
如果它们的版本为1,则很可能会键入数据库版本号,如果您执行X和Y,而数据库的版本号为2,则只执行Y。类似这样的操作:
if (oldVersion == 1) {
// we added the age column in version 2
dao.executeRaw("ALTER TABLE `account` ADD COLUMN age INTEGER;");
}
if (oldVersion < 2) {
// we added the weight column in version 3
dao.executeRaw("ALTER TABLE `account` ADD COLUMN weight INTEGER;");
}
您在limited by Sqlite上可以使用
ALTER TABLE
进行操作。现在,您只能重命名列或添加新列。有关更多详细信息,请参阅文档。关于android - 更改列名?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/12071334/