2016-12-14 97 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