我有一个包含不同列的表“Items”,但我没有在每列中指定一个名称。现在我在这个表中有不同的行,我想执行:
ItemsDao.queryBuilder().where().eq(Items.NAME, "computer").query();
但我的专栏没有名字。我试图用“alter table”更新我的表,但它不起作用。
AnyBody知道如何在不丢失信息的情况下添加我的专栏名称?
谢谢
答案 0 :(得分:2)
如果要更改数据库,请在SQLiteOpenHelper中:
如果有大的结构更改,请在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下更新架构:
引用它,您需要在进行架构更改时更改数据库版本,然后在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
可以做些什么。现在,您只能重命名列或添加新列。有关更多详细信息,请参阅文档。