AnyLogic数据库表中如何将变量timeTaken的每步值存入数据库?
AnyLogic 定时存储变量值到数据库的正确实现方法
- 不要尝试通过数据库表字段的默认值绑定变量,默认值是静态配置项,无法动态获取仿真运行时的实时变量值,这就是你之前报错的原因。
- 正确做法是用**时间事件(Time Event)**触发数据插入动作:
- 在你的仿真主环境(或包含
wholesaler代理的上层环境)中拖入一个时间事件组件,设置触发间隔为1个时间步(匹配你的仿真时间单位)。 - 双击时间事件,在动作编辑区写入数据库插入代码,示例如下:
// 请替换为你的实际表名和字段名 insertInto(time_records) .columns(time_records.simulation_time, time_records.time_taken) .values(time(), wholesaler.timeTaken) .execute();
- 在你的仿真主环境(或包含
- 前置检查:
- 确保数据库表的字段类型和变量匹配:
time_taken字段设为int类型,与你的变量类型一致。 - 确认数据库连接已正确配置,仿真可以正常访问目标数据库。
- 确保数据库表的字段类型和变量匹配:
- 替代方案(适合批量导出):
先创建一个数据集(Dataset),添加simulation_time(double类型)和time_taken(int类型)列,时间事件中仅将数据写入数据集:
仿真结束后,再将数据集批量导出到数据库,这种方式适合不需要实时存储的场景。yourDatasetName.add(time(), wholesaler.timeTaken);
内容的提问来源于stack exchange,提问作者Alexander
相关产品推荐
相关产品推荐

