更改列名称?

时间:2012-08-22 10:41:31

标签: android ormlite alter-table

我有一个包含不同列的表“Items”,但我没有在每列中指定一个名称。现在我在这个表中有不同的行,我想执行:

ItemsDao.queryBuilder().where().eq(Items.NAME, "computer").query();

但我的专栏没有名字。我试图用“alter table”更新我的表,但它不起作用。

AnyBody知道如何在不丢失信息的情况下添加我的专栏名称?

谢谢

2 个答案:

答案 0 :(得分:2)

如果要更改数据库,请在SQLiteOpenHelper中:

  • 更改数据库版本
  • 覆盖“onUpgrade”以对您进行更改 想
  • 更改onCreate方法,这样新用户将拥有您的数据库的良好版本,而不是旧版本

如果有大的结构更改,请在onUpgrade中复制新数据库中的有用信息并删除旧数据库。

希望有所帮助:)

答案 1 :(得分:2)

修改

对不起,现在我明白了这个问题。您是说您没有为每个字段指定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可以做些什么。现在,您只能重命名列或添加新列。有关更多详细信息,请参阅文档。