我有一个带有不同列的表“ 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/

10-10 13:57