CyborgBeta
Lt. Commander
- Registriert
- Jan. 2021
- Beiträge
- 1.834
Hi,
der zweite Chart ist immer leer. Was mache ich beim Befüllen bzw. Abfragen falsch?
Der Aufruf von
Das Datenbankmodell sollte ungefähr so sein:
Link: https://github.com/JetBrains/xodus/wiki/Entity-Stores#links
Vielen Dank für jeden Hinweis
der zweite Chart ist immer leer. Was mache ich beim Befüllen bzw. Abfragen falsch?
Java:
new TimerTask() {
@Override
public void run() {
try {
final String[][] rows = getRows();
if (rows == null) {
return;
}
double sum = 0;
for (final String[] a : rows) {
double d = Double.parseDouble(a[2]);
if (d > 0) {
sum += d;
}
}
final double sumRounded = Math.round(sum * 100) / 100.0;
try (PersistentEntityStore store = PersistentEntityStores.newInstance("rowsData")) {
store.executeInTransaction(txn -> {
Entity row = txn.newEntity("Row");
row.setProperty("time", System.currentTimeMillis());
row.setProperty("sum", sumRounded);
for (final String[] a : rows) {
Entity asset = txn.newEntity("Asset");
asset.setProperty("name", a[0]);
asset.setProperty("amount", a[1]);
asset.setProperty("sum", a[2]);
asset.addLink("row", row);
}
});
}
}
Java:
final ArrayList<Date> xData = new ArrayList<>();
final ArrayList<Double> yData = new ArrayList<>();
final TreeMap<String, ArrayList<Double>> ys = new TreeMap<>();
try (PersistentEntityStore store = PersistentEntityStores.newInstance("rowsData")) {
store.executeInReadonlyTransaction(txn -> {
EntityIterable rows = txn.sort("Row", "time", true);
for (final Entity e : rows) {
Long l = (Long) e.getProperty("time");
assert l != null;
xData.add(new Date(l));
yData.add((Double) e.getProperty("sum"));
TreeMap<String, Double> map = new TreeMap<>();
EntityIterable row = e.getLinks("row").asSortResult();
for (final Entity e2 : row) {
Double sum = (Double) e2.getProperty("sum");
assert sum != null;
if (sum > 0) {
map.put((String) e2.getProperty("name"), sum);
}
}
if (map.size() > 0) {
for (final Map.Entry<String, Double> me : map.entrySet()) {
ys.computeIfAbsent(me.getKey(), list -> new ArrayList<>())
.add(me.getValue());
}
}
}
});
}
// Create Chart
XYChart chart = new XYChartBuilder().width(800).height(600).title("Sums").build();
chart.addSeries("$", xData, yData);
XYChart chart2 = new XYChartBuilder().width(800).height(600).title("Sums (2)").build();
for (final Map.Entry<String, ArrayList<Double>> me : ys.entrySet()) {
chart2.addSeries(me.getKey(), xData, me.getValue());
}
// Show it
SwingWrapper<XYChart> sw = new SwingWrapper<>(List.of(chart, chart2));
JFrame frame = sw.displayChartMatrix();
frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
Der Aufruf von
e.getLinks("row").asSortResult();
liefert immer ein leeres Iterable
zurück.Das Datenbankmodell sollte ungefähr so sein:
Link: https://github.com/JetBrains/xodus/wiki/Entity-Stores#links
Vielen Dank für jeden Hinweis