UCanAccess:将列添加到现有表
问题描述:
我有一个正在运行的Java项目,它使用Access .accdb数据库来存储数据。 我正在为我的程序进行更新,以便为用户提供更多功能。 为了这个工作,我需要添加一列到充满数据的现有表。 作为我研究我发现UCanAccess不能支持UCanAccess:将列添加到现有表
ALTER TABLE TableName ADD ColumName DataType
这是不幸的,但据我所知,由于底层驱动程序不支持它,UCanAccess不能支持它的。
然后我发现这个解决办法:
How to alter table using UCanAccess
但是这不会对我也工作,因为1.我使用的.mdb和2.我不能确定用户有安装了Microsoft Access。
然后我有想法克隆当前表与1额外的列,克隆所有数据到它,删除旧的,并重新命名为旧的名称。但我不知道该怎么做。
有谁知道更好的方法或知道如何实现我的想法?
答
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");
这soun ds good,我可以用UCanAccess更新jackcess仍然工作吗? – Mattizin
我不知道最近对Jackcess的任何更改会导致UCanAccess出现问题。 –
这工作非常感谢:) – Mattizin