UCanAccess:将列添加到现有 table

UCanAccess: Add column to existing table

我有一个正在运行的 Java 项目,它使用 Access .accdb 数据库来存储数据。 我正在为我的程序进行更新,以便为用户提供更多功能。 为此,我需要向现有的 table 填充数据的列添加一列。 当我研究时,我发现 UCanAccess 不支持

ALTER TABLE TableName ADD ColumName DataType

这很不幸,但我知道由于低级驱动程序不支持它,所以 UCanAccess 也不能支持它。

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

但这对我也不起作用,因为 1. 我正在使用 .accdb 和 2. 我不能确定用户是否安装了 Microsoft Access。

然后我想到用 1 个额外的列克隆当前的 Table,将所有数据克隆到其中,删除旧的并将新的重命名为旧的名称。但是我不知道该怎么做。

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

Jackcess 2.1.5 添加了向现有 table 添加新列的功能。计划在 UCanAccess 中扩展 DDL 支持以启用 ALTER TABLE,但与此同时,如果您更新项目以使用 Jackcess 2.1.5 或更高版本(取代 UCanAccess 中较早的 Jackcess 版本 lib/文件夹)然后你可以像这样添加你的列:

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