UCanAccess:将列添加到现有表

时间:2016-12-14 13:22:12

标签: java ms-access jdbc ucanaccess

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

ALTER TABLE TableName ADD ColumName DataType

这很不幸,但据我所知,由于低级别的驾驶员不支持,UCanAccess也无法支持。

然后我发现了这个解决方法:

How to alter table using UCanAccess

但这也不适合我,因为1.我使用.accdb和2.我无法确定用户是否安装了Microsoft Access。

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

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

1 个答案:

答案 0 :(得分:3)

Jackcess 2.1.5增加了向现有表添加新列的功能。有计划在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");