1

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

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

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

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

谢谢

4

2 回答 2

2

如果你想改变数据库,在你的 SQLiteOpenHelper 中你应该:

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

如果结构发生较大变化,在 onUpgrade 中将有用信息复制到新数据库并删除旧数据库。

希望能帮助到你:)

于 2012-08-22T11:00:07.630 回答
2

编辑:

对不起,现在我明白了这个问题。您是说您没有columnName = "..."为每个字段指定 a ,因此您现在遇到了问题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;");
}

Sqlite 限制了您可以 使用. 现在您只能重命名列或添加新列。有关更多详细信息,请参阅文档。ALTER TABLE

于 2012-08-22T19:55:14.233 回答