SQL Befehl

Status
Nicht offen für weitere Antworten.

PollerJava

Top Contributor
Moin Moin,

in meiner Datenbank sind eine Menge Tupel drinnen, wo ein Tupel so aussieht -> zeitstempel | wert

wenn der User jetzt eine Checkbox anklickt und einen Zeitbereich ausgewählt hat, dann werden die Werte eben "von" "bis" aus der DB geladen und auf dem JFreeChart angezeigt,

Ich benötige aber eh nicht alle Werte, wenn ich eine Bildschirm mit der Auflösung von z.B.: 800*600 Pixel habe, brauche ich eh nur z.B.: 600 Werte auf der x- Achse,

Meine Frage wäre jetzt, ob es eine SQL- Befehl gibt, mit dem ich sagen kann, ich starte z.B.: bei einer Zeit von 14:30 und will eine Stunde anzeigen, also:

14:30 bis 15:30 -> das sind 60min -> 3600sec/600Pixel = 6sec also ich nehme die Werte 14:30 + n*6sec aus der DB heraus bzw. den Wert, der dem berchneten (14:30 + n*6sec, n = 0,1,2,... ) am Nächsten liegt,

Ist das mit SQL irgendwie möglich??

Vielen Dank für Eure Antworten,

lg
 
S

SlaterB

Gast
automatisiert sicherlich gar nicht,

mit eigenen Berechnungen ist einiges möglich, kommt auf die Rahmenbedingungen an,
welche Werte sind z.B. in der DB, genau einer pro Sekunde oder kürze Abstände, mal mehr mal weniger usw.?
welche Anfragen hast du, immer nur sowas günstiges wie alle 6 Sekunden oder auch alle 5.05 Sekunden?

wichtig wäre nun, eine berechnenbare Zeit aus dem Datum herauszuholen,
Stunden, Minuten, Sekunden usw. extrahieren und als Zahlen darzustellen,
kenne die Befehle dazu gerade nicht,

du kannst dir da den ganzen Aufwand sparen,
wenn du das Datum zumindest nebenher noch als einfache Zahl abspeicherst,
z.B. als Anzahl Millisekunden seit 1970 (Date.getTime())

und dann z.B.
WHERE time > starttime and time < endtime
and (time - starttime) mod 6 == 0

> bzw. den Wert, der dem berchneten (14:30 + n*6sec, n = 0,1,2,... ) am Nächsten liegt,

von selber passiert auch da nix,
du musst eine intelligente Anfrage stellen, am besten mit dem Wissen, welche Daten vorliegen,

wenn in der DB ein Wert pro Sekunde vorliegt, und du ein Raster von 2.2 Sekunden hast,
also
2.2 -> 2
4.4 -> 4
6.6 -> 7
8.8 -> 9
11 -> 11

hmm, dann fällt mir jetzt erstmal nur die wenig allgemeine Lösung
and (time - starttime) mod 11 in (0,2,4,7,9)
ein

das klappt bei Abständen mit größerer Peridode kaum so gut ;)
vielleicht gibts noch intelligenteres

wenn du aber nur ganze Sekunden bzw. x.y Sekunden hast,
dann wäre das denkbar (die akzeptierten Intervallwerte automatisch berechenbar),
und eine ausreichende Variabilität für die Chart

je mehr Nachkommastellen, desto schwieriger,
die Berechnung gar nicht mal, aber eine lange in (0,2,4,7,9, ..) -Liste macht die Query langsam
 

PollerJava

Top Contributor
Mein Problem ist ja, das ich mir die ganzen Daten von der DB hole und daraus lauter Objekte mache (x- Wert = zeitstempel, y- wert = wert) und bei sehr vielen gleichzeitigen Anfragen an die DB füllt mir das den Java Heap Speicher mit diesen Objekten an und ich bekomme eine MemmoryOutOfBoundException: Java Heap Space,
 
S

SlaterB

Gast
eine ganz neue Info, das hätte man am Anfang des Topics gar nicht gedacht ;)
 

PollerJava

Top Contributor
Naja, ich werde Deinen vorschlag eh umsetzten, eine besssere Möglichkeit gibts eh nicht,


Vielen Dank!!!

lg
 

PollerJava

Top Contributor
Ich hol mir nur die Daten raus die ich brauche -> von...bis aber manche Einträge in der DB kann ich im ersten Moment nicht darstellen, wenn hineingezoomt wird, benötige ich diese Werte dann doch wieder,
Ich muss halt da einen Mittelweg finden,

Grundsätzlich hole ich nur die Daten raus, die ich benötige,

Die Frage ist auch, ob ich die Daten dann überhaupt aufzeivchen soll

lg
 
T

tuxedo

Gast
Ich hatte mal n ähnliches "Problem":

Ich hatte aufgezeichnete GPS Daten in einer DB die ich in einem Panel mit überschriebenem paint() darstellen wollte. Je nach Zoom hatte ich da locker 15.000 Werte die aus der DB zu holen waren. Und hinzu kam noch, dass sich die mit den Daten selbstgezeichnete Karte mit der aktuellen GPS Position mitbewegt hat.

Mein Trick dabei war, etwa 50% mehr Daten aus der DB zu lesen und erst erneut zu lesen, wenn ich an den Rand der zusätzlichen 50% der Daten gekommen bin.

Bzgl. der Zeichengeschwindigkeit: Bei starkem Zoom-In sind waren mehr Details zu erkennen. Also musste ich möglichst schnell zeichnen können. Gleichzeitig gab es auch weniger Daten die gezeichnet werden mussten.

Umgekehrt, bei der totalen Ansicht der Karte, gabs wenig Details zu sehen, jedoch hab ich viele Daten benötigt. Also hab ich da die Karte beim zeichnen künstlich ausgebremst damit ich die embedded HSQLDB nicht zu sehr gestresst hab.

Vielleicht kannst du damit ja was in deiner Anwendung anfangen ...

- Alex
 
S

SlaterB

Gast
und was kann man sich unter den 50% praktisch vorstellen?

in PollerJavas Beispiel:

die grob Sicht enthält die Werte
10 sec, 20, 30, 40, 50, 60,

wenn man jetzt ein bisschen reinzoomt und 8, 16, 24, 32, 40 usw. darstellen will,
wie können da 50% helfen?

selbst bei maximaler Ausnutzung der alten Werte, nämlich 100% Zooom auf
5, 10, 15, 20, 25, 30
müsste man wenigstens auch alle 5er-Werte vorrätig haben,

also wenigestens 100% mehr laden um genau einen festen Zoom zu unterstützen,
sonst viel viel mehr laden oder gar nicht?
 
T

tuxedo

Gast
Bei mir waren 50% halt die richtige Wahl.... Die "ultimative Weisheit" ist es natürlich nicht. Sollte ja auch nur als Anregung dienen...
 
S

SlaterB

Gast
war von mir ja auch nicht abweisend, sondern eine pure angeregte Nachfrage,
ohne Informationen zum Sinn ist das ganze nämlich nicht mehr anregend ;)
 
T

tuxedo

Gast
Naja, Hintergrund ist ja das Caching und/oder/bzw. Pre-Loading.
 
S

SlaterB

Gast
das ist klar, aber wie können diese wenigen Daten helfen,
wo werden sie angezeigt usw.

ich kann mir eben keinen Zoom vorstellen, bei dem man mit 50% weiteren Daten auskommt,
es macht mir logisch gesehen keinen Sinn, 66% alte Daten noch mitanzuzeigen

das war wohl etwas mit viel Rundung/ Mittelwerte/ Gewichtung?
wenn man z.B.

Sec - Wert
10 -> 70
20 -> 140
30 -> 150
40 -> 160
50 -> 270

hat und nun den Zoom erhöht und Mittelwerte berechnet:

Sec - Wert
10 -> 70
17 -> etwas zwischen 70 und 140 -> 115
24 -> etwas zwischen 140 und 150 -> 144
usw.

dann hilft ja durchaus jede weitere Info weiter, um die Mittelwerte genauer auszurechnen,
das könnte ich mir vorstellen,
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
N Validator für einen SQL-Befehl Allgemeine Java-Themen 22
J CMD Befehl in Java Consolenprogramm ausführen Allgemeine Java-Themen 6
T Konsolen-Befehl junk Allgemeine Java-Themen 2
Joker4632 Methoden Befehl an bereits extern geöffnete Programm-spezifische Konsole senden Allgemeine Java-Themen 1
F SQLite mit Java / Probleme beim INSERT Befehl Allgemeine Java-Themen 4
F Create Befehl mit variierender Spaltenanzahl/Spaltenname Allgemeine Java-Themen 5
E String in Zahl umwandeln, ohne Befehl Integer.parseInt Allgemeine Java-Themen 3
D Klassenübergreifender Befehl geht nicht Allgemeine Java-Themen 10
T DLL Befehl Funktionsparameter Allgemeine Java-Themen 6
H FTP Befehl/Java Methode für Submit im z/Os (Host) Allgemeine Java-Themen 1
B Zeitmessen Befehl sende und empfagen Allgemeine Java-Themen 10
G Befehl funktioniert in Eclipse allerdings nicht in einer Jar-Datei Allgemeine Java-Themen 3
J java zurück befehl Allgemeine Java-Themen 18
iB0T "goto" Befehl aus Batch in Java und Variablen wert immer wieder neu setzen Allgemeine Java-Themen 4
M Befehl in Runtime ausführen der Eingabe benötigt Allgemeine Java-Themen 3
T Java Programm als Batch Befehl Allgemeine Java-Themen 6
K der Befehl "runas" Allgemeine Java-Themen 13
Jats Programm mit CMD Befehl hängt sich auf oder gibt error = 5 aus Allgemeine Java-Themen 4
B UNIX Shell befehl über JavaCode ausführen Allgemeine Java-Themen 19
D befehl auf mehrere objekte anwenden Allgemeine Java-Themen 7
S Shell-Befehl: mail Allgemeine Java-Themen 6
M String in Befehl umwandeln Allgemeine Java-Themen 10
S Überprüfen, ob ein Shell Befehl existiert! Allgemeine Java-Themen 4
G CMD befehl: BAT erstellen, reinschreiben und starten? Allgemeine Java-Themen 12
S Suche Pendant zu einem VB Befehl Allgemeine Java-Themen 2
G Befehl an OS X cmd Allgemeine Java-Themen 7
L mit exec() befehl ausführen ( OS X / Linux) Allgemeine Java-Themen 8
T jar mit Befehl zur Vergrößerung des VM-Speichers Allgemeine Java-Themen 11
S mit welchem befehl kann ich mein programm autom. schließen Allgemeine Java-Themen 3
A Zusammenfassen von zwei Dateien (wie beim DOS-Befehl copy) Allgemeine Java-Themen 6
S String als Befehl interpretieren Allgemeine Java-Themen 2
S GetColor? anderer befehl Allgemeine Java-Themen 13
M Methode x mal ausführen auf Befehl Allgemeine Java-Themen 7
L linux befehl aus java programm starten Allgemeine Java-Themen 7
M Unter MacOS einen Befehl auf Konsole ausführen? Allgemeine Java-Themen 6
G JDK Version - exec Befehl Allgemeine Java-Themen 3
M Befehl unter Win98 ausführen? Allgemeine Java-Themen 3
M Befehl aus Anwendung starten Allgemeine Java-Themen 7
C shell befehl mit java ein- und auslesen Allgemeine Java-Themen 2
B befehl "java" wird nicht gefunden Allgemeine Java-Themen 4

Ähnliche Java Themen


Oben