AnyLogic 8.1.0 PLE实时读取数据库更新行问题咨询
Hey there! Let's clear this up for you: Yes, AnyLogic 8.1.0 PLE absolutely supports reading newly inserted database rows during an active simulation run—the issue you're seeing is almost certainly related to commit settings or how you're querying the data, not a limitation of the PLE version.
Here's how to fix this and get real-time access to your new rows:
1. Fix Your Database Commit Behavior
By default, some AnyLogic database configurations delay commits until the simulation ends (to optimize performance). To see rows immediately after insertion, you need to force an immediate commit:
- If you're using raw SQL
executeUpdate()calls for insertion, add acommit()right after:// Insert your row database.executeUpdate("INSERT INTO your_table (col1, col2) VALUES ('test', 42)"); // Commit immediately to make the row visible database.commit(); - If you're using AnyLogic's built-in Table object (the drag-and-drop database table), check its properties:
- Find the "Commit mode" setting and switch it from On simulation end to Immediate. This ensures every row addition is committed right away.
2. Refresh or Re-Query for Updated Data
Just inserting and committing isn't enough if you're relying on cached results. Make sure you're fetching fresh data every time your event triggers:
- For raw SQL queries: Don't reuse a single
ResultSetfrom simulation startup. Instead, run yourexecuteQuery()every time you need the latest data:ResultSet latestRows = database.executeQuery("SELECT * FROM your_table WHERE col1 = 'test'"); while (latestRows.next()) { // Process each newly inserted row here String value = latestRows.getString("col1"); int number = latestRows.getInt("col2"); } latestRows.close(); // Always close ResultSets when done - For AnyLogic Table objects: Call
refresh()before accessing the data to pull the latest rows from the database:// After inserting a row via myTable.addRow(...) myTable.refresh(); // Fetch the latest state from the database // Now access the new rows, e.g., get the last one int lastRow = myTable.getRowsCount() - 1; String newValue = (String) myTable.getValueAt(lastRow, "col1");
3. PLE vs. Professional Version Note
AnyLogic PLE doesn't restrict real-time database read/write functionality—it only limits things like model size, export options, and some advanced features. So your issue isn't tied to using PLE.
Quick Troubleshooting Check
If you're still not seeing rows:
- Double-check that your insertion code is actually running when the event triggers (add a
traceln("Row inserted!")to confirm). - Ensure you're querying the same database instance that your insertion is writing to (no accidental separate connections).
内容的提问来源于stack exchange,提问作者Murk

