Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/346.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java UCanAccess:将列添加到现有表中_Java_Ms Access_Jdbc_Ucanaccess - Fatal编程技术网

Java UCanAccess:将列添加到现有表中

Java UCanAccess:将列添加到现有表中,java,ms-access,jdbc,ucanaccess,Java,Ms Access,Jdbc,Ucanaccess,我有一个正在工作的Java项目,它使用Access.accdb数据库来存储数据。 我正在更新我的程序,为用户提供更多功能。 为了实现这一点,我需要向现有的表中添加一列数据。 当我研究时,我发现UCanAccess无法支持 ALTER TABLE TableName ADD ColumName DataType 这是不幸的,但我明白,由于低级别驱动程序不支持它,UCanAccess也不能支持它 然后我找到了这个解决方法: 但这对我来说也不管用,因为1。我正在使用.accdb和2。我不能确定用户

我有一个正在工作的Java项目,它使用Access.accdb数据库来存储数据。 我正在更新我的程序,为用户提供更多功能。 为了实现这一点,我需要向现有的表中添加一列数据。 当我研究时,我发现UCanAccess无法支持

ALTER TABLE TableName ADD ColumName DataType
这是不幸的,但我明白,由于低级别驱动程序不支持它,UCanAccess也不能支持它

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

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

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


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

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

//直接使用Jackcess(2.1.5或更高版本)API
//向现有表中添加列的步骤
//
//注意:首先关闭所有打开的UCanAccess连接。
//
com.healthmarketscience.jackcess.Database db=
open(新文件(dbFileSpec));
新建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
,例如

语句stmt=conn.createStatement(); 执行(“ALTER TABLE TableName ADD COLUMN newCol LONG”);
这听起来不错,我可以在UCanAccess仍在运行的情况下更新jackcess吗?我不知道jackcess最近有任何更改可能会导致UCanAccess出现问题。您现在可以使用添加了这些功能的4.0.0