You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过代码刷新AnyLogic的ModelDatabase内部数据库

AnyLogic运行时刷新内部ModelDatabase解决方案

问题根因

AnyLogic在模型启动时会将所有关联到内部ModelDatabase的参数、表函数、预查询结果缓存到内存中,你执行ModelDatabase.importFromExternalDB只是更新了底层数据库的存储数据,内存中的缓存没有同步更新,才会出现修改仅在重启模型后生效的现象,和auto-commit配置无关。

可用的刷新方案

  • 刷新所有数据库关联的全局参数/代理属性:调用getEngine().refreshDatabaseConnectedParameters(),该方法会触发全量重取所有绑定了数据库值的参数,同步内存和数据库的最新数据。
  • 刷新自定义查询结果:如果你通过selectFrom/sqlQuery等API自定义了查询逻辑并将结果存储到了变量中,需要在数据库导入完成后重新执行一次查询语句,覆盖原变量的旧缓存值即可。
  • 刷新绑定数据库的表函数(Lookup Table):调用对应表函数实例的reload()方法,例如你定义的表函数名为capacityLookup,执行capacityLookup.reload()即可完成刷新。

实验界面调用的适配代码

如果你的导入逻辑写在Simulation Experiment界面的组件动作中,不在仿真运行的代理上下文内,需要先获取当前运行的仿真实例再调用刷新方法,参考代码如下:

// 获取当前活跃的仿真运行实例
Simulation currentSim = getExperimentHost().getCurrentSimulation();
if (currentSim != null && currentSim.getEngine() != null) {
    // 刷新所有数据库绑定参数
    currentSim.getEngine().refreshDatabaseConnectedParameters();
    // 按需补充自定义查询重执行、表函数刷新逻辑
    currentSim.demandLookup.reload();
}

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 01:54:03