我有一个包含不同列的表“项目”,但我没有在每一列中指定名称。现在我在这个表中有不同的行,我想执行:
ItemsDao.queryBuilder().where().eq(Items.NAME, "computer").query();
但我的专栏没有名字。我试图用“alter table”更新我的表,但它不起作用。
AnyBody 知道如何在不丢失信息的情况下添加我的专栏名称吗?
谢谢
我有一个包含不同列的表“项目”,但我没有在每一列中指定名称。现在我在这个表中有不同的行,我想执行:
ItemsDao.queryBuilder().where().eq(Items.NAME, "computer").query();
但我的专栏没有名字。我试图用“alter table”更新我的表,但它不起作用。
AnyBody 知道如何在不丢失信息的情况下添加我的专栏名称吗?
谢谢
如果你想改变数据库,在你的 SQLiteOpenHelper 中你应该:
如果结构发生较大变化,在 onUpgrade 中将有用信息复制到新数据库并删除旧数据库。
希望能帮助到你:)
编辑:
对不起,现在我明白了这个问题。您是说您没有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 下更新架构:
要引用它,您需要在进行架构更改时更改数据库版本,然后在您的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