2016-12-14 101 views
2

我有一個正在運行的Java項目,它使用Access .accdb數據庫來存儲數據。 我正在爲我的程序進行更新,以便爲用戶提供更多功能。 爲了這個工作,我需要添加一列到充滿數據的現有表。 作爲我研究我發現UCanAccess不能支持UCanAccess:將列添加到現有表

ALTER TABLE TableName ADD ColumName DataType 

這是不幸的,但據我所知,由於底層驅動程序不支持它,UCanAccess不能支持它的。

然後我發現這個解決辦法:

How to alter table using UCanAccess

但是這不會對我也工作,因爲1.我使用的.mdb和2.我不能確定用戶有安裝了Microsoft Access。

然後我有想法克隆當前表與1額外的列,克隆所有數據到它,刪除舊的,並重新命名爲舊的名稱。但我不知道該怎麼做。

有誰知道更好的方法或知道如何實現我的想法?

回答

3

Jackcess 2.1.5添加了將新列添加到現有表的功能。有計劃擴展UCanAccess中的DDL支持以啓用ALTER TABLE,但與此同時,如果您更新項目以使用Jackcess 2.1.5或更高版本(替代UCanAccess lib/文件夾中較早的Jackcess版本),那麼您可以添加列像這樣:

// use the Jackcess (2.1.5 or later) API directly 
// to add a column to an existing table 
// 
// Note: Close any open UCanAccess connection first. 
// 
com.healthmarketscience.jackcess.Database db = 
     com.healthmarketscience.jackcess.DatabaseBuilder.open(new File(dbFileSpec)); 
new com.healthmarketscience.jackcess.ColumnBuilder("newCol") 
     .setType(com.healthmarketscience.jackcess.DataType.LONG) 
     .addToTable(db.getTable("TableName")); 
db.close(); 

更新:2017年1月

UCanAccess版本4.0.0及以上現在支持ALTER TABLE,例如,

Statement stmt = conn.createStatement(); 
stmt.execute("ALTER TABLE TableName ADD COLUMN newCol LONG"); 
+0

這soun ds good,我可以用UCanAccess更新jackcess仍然工作嗎? – Mattizin

+1

我不知道最近對Jackcess的任何更改會導致UCanAccess出現問題。 –

+1

這工作非常感謝:) – Mattizin