# Tägliche abfrage von daten.



## hierzn (5. Dez 2006)

hallo und zwar hab ich da ne frage

ich hab ne datenbank die online bzw local derzeit für testzwecken, und es gibt einträge die mit einem datum versehen sind und das programm soll die datenbank einmal am tag(00:01) durchlaufen und alle einträge die in den nächsten tagen anstehen ausgeben! 

also zb steht dort in der DB (heute ist der 5.12.2006):

09.12.2006. geburtstag kurt
10.12.2006 hochzeit tante erna 
so zb. und er soll diese 2 events dann ausgeben.. 


nur da ich ein totaler java anfänger bin hab ich keinen tau wie das gehen soll.

bin für jede hilfe dankbar! 
mfg hierzn


----------



## SlaterB (6. Dez 2006)

'totaler java anfänger' klingt jetzt erstmal recht gefährlich,

bevor du ein spezielles DB-Problem löst, solltest du erstmal viel rumprobieren, 
Treiber laden, Lese- und Schreibzugriffe von Java aus ausführen usw.,

da gibts in jedem Lehrbuch ein entsprechendes Kapitel zum durcharbeiten,
aber vielleicht bist du schon so weit?

dann fehlt als zweite Komponenten noch ein Thread,
der im Hintergrund eines Java-Programmes wartet,
ab und zu die Systemzeit ausliest und dann zur rechten Zeit reagiert,
genaue Fragen dazu? -> genauere Antworten

läuft dein PC aber wirklich 24 Stunden nonstop?
oder ist das online auf einem Server?
brauchst du sowas wie automatischen Neustart bei System-Neustart?
brauchst


----------



## hierzn (6. Dez 2006)

also wie ich db in java einbinde usw weiss ich schon hat sogar shcon mal bei nem testbsp funktioniert 


das proggi soll dann aufm server laufen und von dort ne msg  weiter per email senden soll aber das is bissl später dann.. will erstmal nur sschaun das es funkt die msg überhaupt zu generieren wenn er in der db so einen eintrag findet..


----------



## SlaterB (6. Dez 2006)

ja wenn dir die DB-Seite klar ist, bleibt noch die Beschäftigung mit den Threads, bzw. vielleicht einer diese Mode-Klassen wie Timer/ TimerTask,

da gilt immer noch: steht zunächst in Lehrbüchern 
vor allem Thread.sleep(time) und System.currentTimeInMillies() wird dir vielleicht helfen

oder was ist deine genaue Frage?

mit Threads wird es gehen, ja,
alternativ externe Programme, cronjobs unter Linux z.B.


----------



## hierzn (6. Dez 2006)

ok danke..werd ich mal probieren.. und mich mal meldne..


----------



## SlaterB (6. Dez 2006)

System.currentTimeInMillies() ist vielleicht bisschen arg elementar,

Calendar.getInstance() liefert dir ein aktuelles Calendar-Objekt,
welches du etwas komfortabler nach Tag/ Stunde/ Minute fragen kannst,
allerdings wieder eine Klasse mehr, die du kennenlernen musst


----------



## Gast (7. Dez 2006)

Bau dir nen Cronjob der jeden Tag um 00:01 Uhr angestoßen wird.SelfHTML bietet z.B. einen Dienst für Cronjobs an. Kannste einfach ne bestimmte Seite aufrufen lassen.
Und du rufst halt ein Servlet auf welches auf neue Einträge checkt und die Mail verschickt. Das ganze über Threads zu machen halte ich bei ner Webanwendung (?) für quark.


----------



## Yzebär (7. Dez 2006)

Gast hat gesagt.:
			
		

> Bau dir nen Cronjob der jeden Tag um 00:01 Uhr angestoßen wird.SelfHTML bietet z.B. einen Dienst für Cronjobs an. Kannste einfach ne bestimmte Seite aufrufen lassen.
> Und du rufst halt ein Servlet auf welches auf neue Einträge checkt und die Mail verschickt. Das ganze über Threads zu machen halte ich bei ner Webanwendung (?) für quark.



Es wurde übrigens nirgends geschrieben, daß es sich um eine Webanwendung handelt. Dein Vorschlag ist übrigens ziemlich sicherheitskritisch. Was ist denn, wenn andere die Webseite aufrufen? Dann platzt im besten Fall meine Mailbox und im schlimmsten Fall raucht der Webserver ab (DoS-Attacke).


----------



## hierzn (8. Dez 2006)

also das ganze is online
aber man sollte nur zugriff via intranet haben..


----------



## Yzebär (8. Dez 2006)

Ich würde prinzipiell immer versuchen so wenig Kommunikation/Interaktion wie möglich nach "draußen" zu haben. Und für so eine einfache Sache, wie einen Scheduler (um nichts anderes handelt es sich ja hier) würde ich erst recht nicht mit irgendwelchen Seitenaufrufen von "draußen" rumbasteln. Bau dir nen Scheduler nach den Vorschlägen von SlaterB, den kannst du vielleicht auch noch für andere Sachen wiederverwenden.


----------



## Yzebär (8. Dez 2006)

Ich habe soeben was gefunden, das dir wirklich helfen könnte. Schau dir mal die Klassen Timer und TimerTask an (java.util). Ein gestarteter Timer läuft in einem eigenen Thread im Hintergrund, d.h. du mußt nur einen Timer erzeugen. Du definierst deine DB-Auslesaktion-undwasauchimmer als run-Methode einer von TimerTask abgeleiteten Klasse. Später übergibst du dem Timer den TimerTask und sagst ihm anhand von Parametern wann und wie oft der TimerTask ausgeführt werden muß. Einziger Haken ist, daß die Zeiten in Millisekunden angegeben werden müssen...  :roll: 


```
public class MacheIrgendwasJedenTag extends TimerTask
{
   public void run()
   {
       // Tue dies und das...
   }
}

// Irgendwoanders
long ausfuehrzeit =  ... // Uhrzeit in Millisekunden umrechnen
long period = ... // 24h in Millisekunden umrechnen
Date date = ... // Datum der ersten Ausführung
TimerTask task =  MacheIrgendwasJedenTag();
task.scheduledExecutionTime = ausfuehrzeit;

Timer timer = new Timer();
timer.schedule( task, date, period );
```

So ungefähr... ich hab den Code jetzt nicht explizit getestet.


----------



## hierzn (9. Dez 2006)

danke.. ich werd die nächste woche das ganze mal probiern zum ausprogrammiern bin im moment im stress..


----------



## hierzn (16. Jan 2007)

so also datenbank zugriff funkt mal dh kann von jeder tabelle alles alle daten lesen jetz steh ich halt vor dem problem mit den threads... das oben angeführte bsp hört sich gut an jedoch bin ich noch daran es zum laufen zu bringen ^^


----------

