Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ms-access/4.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
MS Access赢得';在java中通过ucanaccess执行INSERT INTO查询后更新表_Java_Ms Access_Ucanaccess - Fatal编程技术网

MS Access赢得';在java中通过ucanaccess执行INSERT INTO查询后更新表

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,

我有java程序来分配度假者到酒店房间。 每当我尝试在java中通过ucanaccess使用insert INTO query将酒店房间的记录插入ms access表时,除非我关闭并重新打开access,或者当我点击“压缩并修复”命令时,相关表不会更新。是否有任何方法可以修复此问题并使access立即使用新记录更新表,而无需执行这些步骤? 我的java源代码中有一部分:

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中设置了哪些选项?