MS Access赢得';在java中通过ucanaccess执行INSERT INTO查询后更新表
我有java程序来分配度假者到酒店房间。 每当我尝试在java中通过ucanaccess使用insert INTO query将酒店房间的记录插入ms access表时,除非我关闭并重新打开access,或者当我点击“压缩并修复”命令时,相关表不会更新。是否有任何方法可以修复此问题并使access立即使用新记录更新表,而无需执行这些步骤? 我的java源代码中有一部分:MS Access赢得';在java中通过ucanaccess执行INSERT INTO查询后更新表,java,ms-access,ucanaccess,Java,Ms Access,Ucanaccess,我有java程序来分配度假者到酒店房间。 每当我尝试在java中通过ucanaccess使用insert INTO query将酒店房间的记录插入ms access表时,除非我关闭并重新打开access,或者当我点击“压缩并修复”命令时,相关表不会更新。是否有任何方法可以修复此问题并使access立即使用新记录更新表,而无需执行这些步骤? 我的java源代码中有一部分: public boolean addHotelRoom(Integer roomNum, Integer periodNum,
public boolean addHotelRoom(Integer roomNum, Integer periodNum,
boolean hasDisabledDevices)
{
try
{
Class.forName("net.ucanaccess.jdbc.UcanaccessDriver");
try (Connection conn = DriverManager.getConnection(Consts.CONN_STR);
CallableStatement stmt = conn.prepareCall(Consts.SQL_INS_HOTEL_ROOM))
{
stmt.setInt(1, roomNum);
stmt.setInt(2, periodNum);
stmt.setBoolean(3, hasDisabledDevices);
stmt.executeUpdate();
return true;
}
catch (SQLException e)
{
e.printStackTrace();
}
} catch (ClassNotFoundException e)
{
e.printStackTrace();
}
return false;
}
UCanAccess不支持Access数据库上的共享模式 这在UCanAccess博客上有解释 这意味着,您当前的用例在UCanAccess应用程序写入时不支持打开Access。除非将来添加支持,否则它将无法工作。目前没有解决办法 半解决方案可能是使用单独的前端和后端数据库。然后,只需关闭所有表即可关闭数据库,从而避免了关闭整个数据库的需要。根据您的具体要求,Access数据库中的表单也可以与后端断开连接,仅连接以获取或更新数据
请注意,如果Access也执行写入操作,则在Access中打开数据库时让UCanAccess写入数据库可能会导致冲突/损坏。我强烈建议避免这种情况。UCanAccess不支持Access数据库上的共享模式 这在UCanAccess博客上有解释 这意味着,您当前的用例在UCanAccess应用程序写入时不支持打开Access。除非将来添加支持,否则它将无法工作。目前没有解决办法 半解决方案可能是使用单独的前端和后端数据库。然后,只需关闭所有表即可关闭数据库,从而避免了关闭整个数据库的需要。根据您的具体要求,Access数据库中的表单也可以与后端断开连接,仅连接以获取或更新数据
请注意,如果Access也执行写入操作,则在Access中打开数据库时让UCanAccess写入数据库可能会导致冲突/损坏。我强烈建议避免使用它。检查
stmt.executeUpdate()
的返回结果,以确保它确实影响了表和conn.commit()
,以防自动提交off@MadProgrammer出于某种原因,它第一次起到了作用,但后来没有了,没有什么可以做的了,因为我不知道你们数据库的要求。也许存在防止重复的约束,用可用信息进行诊断几乎是不可能的。您所能做的最好的事情是确保stmt.executeUpdate
返回一个非零值,并且如果禁用自动提交,您正在提交更改CONN_STR中设置了哪些选项?检查stmt.executeUpdate()
的返回结果,以确保它确实影响了表和CONN.commit()
在自动提交的情况下off@MadProgrammer出于某种原因,它第一次起到了作用,但后来就没有了。因为我不知道您的数据库的要求,所以没有什么可以做的了。也许存在防止重复的约束,用可用信息进行诊断几乎是不可能的。您所能做的最好的事情是确保stmt.executeUpdate
返回一个非零值,并且如果禁用自动提交,您正在提交更改CONN\u STR中设置了哪些选项?