You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

AnyLogic仿真运行时无需编译更新数据库模型数据的方法问询

运行时更新AnyLogic模型的Access数据库参数方案

方法1:重新导入指定数据库表

AnyLogic提供了importDatabaseTable()方法,可在运行时手动触发指定表的重新导入,覆盖内部数据库数据,无需重启模型。操作步骤:

  • 确认参数所在的目标数据表(例如PumpingParameters
  • 在需要更新的时机(如按钮点击、定时事件)执行以下代码:
// 从外部Access重新导入目标表
importDatabaseTable(PumpingParameters.class);
// 将更新后的数据赋值给模型参数
pumpingQuality = selectFirst(PumpingParameters).pumpingMass;
traceln("泵送质量已更新为:" + pumpingQuality);

方法2:通过JDBC直接读取最新参数

若仅需更新单个/少数参数,直接用JDBC连接Access查询最新值更高效,无需整表导入:

try {
    // 加载Access的JDBC驱动(UCanAccess)
    Class.forName("net.ucanaccess.jdbc.UcanaccessDriver");
    // 替换为你的Access数据库文件路径
    Connection conn = DriverManager.getConnection("jdbc:ucanaccess://C:/YourPath/YourDatabase.accdb");
    
    Statement stmt = conn.createStatement();
    // 替换为你的参数查询SQL语句
    ResultSet rs = stmt.executeQuery("SELECT pumpingMass FROM Parameters WHERE paramId=1");
    
    if (rs.next()) {
        // 将查询结果同步到模型参数
        pumpingQuality = rs.getDouble("pumpingMass");
        traceln("泵送质量已更新为:" + pumpingQuality);
    }
    
    // 关闭数据库连接资源
    rs.close();
    stmt.close();
    conn.close();
} catch (Exception e) {
    traceln("参数更新失败:" + e.getMessage());
}
  • 注意:需在AnyLogic的Library Manager中添加UCanAccess驱动依赖。

关键注意事项

  • 无论采用哪种方法,更新数据库后都需要重新给模型变量/参数赋值,模型启动时的初始化值不会自动同步。
  • 可将更新逻辑封装为自定义函数,方便在多个场景调用。
  • 如需自动定时更新,可添加Timer事件,设置固定间隔触发更新代码。

内容的提问来源于stack exchange,提问作者Yura

火山引擎 最新活动