我有一個表「項目」與不同的列,但我沒有在每列中名稱。現在我在這個表中有不同的行,我想執行:改變列名稱?
ItemsDao.queryBuilder().where().eq(Items.NAME, "computer").query();
但我的專欄沒有名稱。我試圖用「alter table」更新我的表,但它不起作用。
AnyBody知道如何添加我的專欄名稱而不會丟失我的信息?
謝謝
我有一個表「項目」與不同的列,但我沒有在每列中名稱。現在我在這個表中有不同的行,我想執行:改變列名稱?
ItemsDao.queryBuilder().where().eq(Items.NAME, "computer").query();
但我的專欄沒有名稱。我試圖用「alter table」更新我的表,但它不起作用。
AnyBody知道如何添加我的專欄名稱而不會丟失我的信息?
謝謝
編輯:
對不起,現在我才明白這個問題。您在說您沒有爲每個字段指定columnName = "..."
,並且您現在因而遇到問題。
雖然建議您不需要columnName
即可使QueryBuilder
正常工作。您應該能夠返回到字段並添加一個匹配現有模式的靜態。例如,如果數據庫中的字段是"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;");
}
您是你可以用ALTER TABLE
做什麼limited by Sqlite。現在,您只能重命名列或添加新列。有關更多詳細信息,請參閱文檔。
如果要更改數據庫,在你SQLiteOpenHelper你應該:
如果存在較大的結構變化,請在onUpgrade中將有用信息複製到新數據庫中並刪除舊數據庫。
希望它能幫助:)
我曾考慮過這個選項,但我想我有另一種選擇。因爲我只需要爲使用querybuilder添加一個列的名稱。當我創建表時,我沒有想到我需要更改我的數據庫。謝謝 – MARM
請不要大喊。 =) –
@J。斯蒂恩。好。對不起,我知道下次。 – MARM