UCanAccess:向现有表添加列

3

我有一个正在使用Access .accdb数据库存储数据的Java项目。 我正在对程序进行更新,以为用户提供更多功能。 为了使这个程序工作,我需要在现有的数据表中添加一个填充有数据的列。 在我的研究中,我发现UCanAccess无法支持此操作。

ALTER TABLE TableName ADD ColumName DataType

很遗憾,由于低级别驱动程序不支持它,所以UCanAccess也无法支持它。

然后我找到了这个解决方法:

如何使用UCanAccess更改表

但对我来说这也行不通,因为1.我使用的是.accdb格式,2.我不能确定用户是否已安装Microsoft Access。

然后我想到了通过克隆带有一个额外列的当前表并将所有数据复制到其中,删除旧表并将新表重命名为旧表名称的方法,但我不知道如何实现。

有没有人知道更好的方法或者知道如何实现我的想法?

1个回答

5

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

这听起来不错,我能否使用UCanAccess更新Jackcess仍然有效吗? - Mattizin
1
我不知道最近有任何Jackcess的更改会导致UCanAccess出现问题。 - Gord Thompson
1
你现在可以使用添加了这些功能的4.0.0版本。 - jamadei

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接