MySQL DB Abfrage in Array, gemischte Array, generelles vorgehen

Wolpertinger

Neues Mitglied
Hallo,

ich arbeite grad an meinem ersten Java Projekt und bin kein geübter Programmierer.
Für den Bereich Messen und Regeln habe ich eine kleine GUI geschrieben.
Ein paar Messwerte anzeigen und per Button schalten geht auch schon.

Nun habe ich eine MariaDB (JDBC) und einen Table welcher 8 Spalten hat und ca. 3000 Reihen.
In diesem Table gibt es 3 Spalten ( Spalte 1 – 3) in denen Werte stehen aus denen etwas berechnet wird und das Ergebnis in andere Spalten (Spalte 6 – 8) des gleichen Table zurückgeschrieben werden sollen.

Meine Vorstellung ist:

Button Drücken >
DB verbinden und die Anzahl der Reihen ermitteln.
Danach die Spalten 1 – 3 in ein Array lesen.
Hier gibt es aber Integer und Dezimal Werte, wie gehe ich damit um?
Dann die Berechnung für jede Zeile im Array durchführen
Das Ergebnis in ein neues Array schreiben für Spalte 6 – 8
Das ganze soll eine Schleife machen mit der Anzahl der ermittelten Reihen.
Ganz am Ende soll dann das Array den Inhalt in die DB schreiben in die Spalten 6 – 8.
Ist diese vorgehen mit dem Array sinnvoll, ich habe gelesen, dass es auch Listen gibt?
Wie kann ich das Ganze möglichst schnell abarbeiten?
Kann man im Array überhaupt Integer und Dezimal mischen?
Ich hab bereits sehr viel gelesen und vielleicht auch zu viel oder das Falsche.
Bei all den Beiträgen, Dokus bin ich langsam etwas planlos.

Gibt es für sowas Beispiele die das Thema gemischte Array lesen, in Schleife verarbeiten und neues Array zurück in die DB schreiben behandeln?
Jegliche Tips sind sehr willkommen!
 
Erst einmal die Frage: Was für Berechnungen willst Du denn machen? Eine Möglichkeit wäre, diese Berechnung dann evtl. direkt von der Datenbank machen zu lassen und du würdest dann nur ein einzelnen UPDATE Aufruf auf der Datenbank starten. (Das wäre ggf. das schnellste)

Ansonsten ist die Verwendung von Arrays eher selten. Da kann man tatsächlich einfach eine der vorhandenen Klassen des Frameworks nutzen.

Und der Aufbau ist dann halt so, dass Du die Elemente eines Datensatzes in einer Liste oder so speicherst (und wenn es ein array sein soll, dann halt ein array). Also kein "gemischtes" Array sondern halt von einem klar definierten Typ!

Generell wäre es auch super, wenn Du identifizieren kannst, für welche Datensätze noch eine Berechnung durchgeführt werden muss und welche da schon fertig sind. Dann kann man die Berechnung auch in mehreren Schritten durchführen (also z.B. in Batches zu jeweils 50 Datensätzen oder so).
 
Die Berechnung ist mit ca. 150 Zeilen schon eher komplex.
Wenn ich die 3 Variablen vorgebe, dann funktioniert die Berechnung auch recht gut.
Auch eine Schleife welche 3000 mal durchlaufen wird funktioniert, die hab ich nur genommen um die Geschwindigkeit zu testen.

Vielleicht wäre für mich der passender Ansatz ArrayList<> weil er Generic ist?

Generell muss die Berechnung für alle Datensätze gemacht werden da es sich um eine Kalibrierung handelt.
 
Ich weiß nicht genau mit welchem Treiber du die Verbindung aufbaust, sollte es aber ein normaler ODBC-Treiber sein kannst du einfach bei jedem Resultset durch das du iterierst die Berechnung durchführen und dieses Ergebnis ganz einfach wieder in die Datenbank schreiben. Somit hast du auch dein ganzen Mischen Problem mit den Datentypen nicht.
 
Das ist natürlich auch eine valide Idee von @Salzzy und das geht mit JDBC auch vergleichbar. Siehe https://docs.oracle.com/javase/tutorial/jdbc/basics/jdbcrowset.html

Sprich: Es würde reichen, die Datenbank abzufragen, im JdbcRowSet Zeile für Zeile durchgehen, die Berechnungen durchführen und Werte setzen und dann die Zeile am Ende speichern.

Das mag für eine kleine Lösung durchaus ausreichen, wobei ich halt eher dazu neige, da mit den "üblichen" Mitteln heran zu gehen, d.h. Entity Klassen, DataLayer (ggf. automatisch über z.B. Hibernate und Annotations in den Entities) und dann die entsprechende Business Logik und so. Aber das kann hier durchaus Overkill sein.
 

Neue Themen


Zurück
Oben