2012-08-22 94 views
1

我有一個表「項目」與不同的列,但我沒有在每列中名稱。現在我在這個表中有不同的行,我想執行:改變列名稱?

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

但我的專欄沒有名稱。我試圖用「alter table」更新我的表,但它不起作用。

AnyBody知道如何添加我的專欄名稱而不會丟失我的信息?

謝謝

+1

請不要大喊。 =) –

+0

@J。斯蒂恩。好。對不起,我知道下次。 – MARM

回答

2

編輯:

對不起,現在我才明白這個問題。您在說您沒有爲每個字段指定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下的更新模式的部分:

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;"); 
} 

是你可以用ALTER TABLE做什麼limited by Sqlite。現在,您只能重命名列或添加新列。有關更多詳細信息,請參閱文檔。

+0

謝謝。但我想更改名稱,而不是添加一列。我讀過這是不可能重新命名一列。我只想在查詢生成器中使用一列。如果我沒有在列中輸入名稱,我不能使用querybuilder。這是真的嗎? – MARM

+0

對不起@MARM。我還是不明白。在sqlite下你可以重新命名一列。我已鏈接到Sqlite頁面,顯示你可以做什麼。 http://www.sqlite.org/lang_altertable.html – Gray

+0

哦,我看到@MARM。讓我改變我的答案。 – Gray

2

如果要更改數據庫,在你SQLiteOpenHelper你應該:

  • 變化的數據庫版本
  • 覆蓋 「onUpgrade」 進行更改你 要
  • 改變onCreate方法,這樣新用戶將擁有數據庫的好版本,而不是舊版本

如果存在較大的結構變化,請在onUpgrade中將有用信息複製到新數據庫中並刪除舊數據庫。

希望它能幫助:)

+0

我曾考慮過這個選項,但我想我有另一種選擇。因爲我只需要爲使用querybuilder添加一個列的名稱。當我創建表時,我沒有想到我需要更改我的數據庫。謝謝 – MARM