MySQl - Neue Datensätze "on the Fly" verarbeiten

Spr3ng

Mitglied
Hallo,

ich schreibe zur Zeit einen kleinen IRC Bot.
Dieser soll auf alle IRC Netzte connecten, die in einer Datenbank stehen.

Das sieht zur Zeit so aus:

Java:
//Alle Server connecten 
			rs = stmt.executeQuery("SELECT * FROM server");
			while (rs.next()) {
				
				String server_url = rs.getString(1);
				int port = rs.getInt(2);
				
				IrcBot bot = new IrcBot();
				
				bot.connect(server_url,port);
				
			}

Funktioniert auch sehr gut, allerdings muss ich jedesmal das Java Programm neustarten, wenn ich einen neuen IRC Server in die DB eingetragen habe, damit für diesen auch eine Bot Instanz eröffnet wird.

Meine Frage ist nun, ist es möglich Java zu veranlassen, bei einem neuen Eintrag in der DB eine Instanz mit den neu eingetragenen Werten zu starten?

Gruß
 
Du darfst dann nicht nur einmal die DB durchsuchen, sondern benötigst einen extra Thread, der z.B. alle 10 Minuten neu in der DB nachschaut, ob Einträge hinzugekommen sind, zu denen noch keine Connection besteht.
 
Naja wer sagt denn, dass du diese Abfrage nur beim Start den programmes machen darfst?

Du könntest das ganze auch auf einen Button legen oder automatisch alle halbe Stunde durchlaufen, oder oder oder....

Du müsstest dir dann nur merken, für welche Hosts bereits eine Instanz läuft...

/EDIT: kacke überholt worden ;(
 
Zum einen, wie kann ich mir "merken" wo schon connected wurde.

Zum anderen geht es mir ja nicht darum, irgendeinen Button drücken zu müssen oder so ne alle 10min schleife reinzubasteln sonder ob es möglich ist, dass java erkennt, das ein neuer eintrag da ist und ihn dann verarbeitet.

Trotzdem danke schonmal für eure ideen!
 
Naja so lange die Datenbank sich nicht bei dienem Java-Programm melden kann, kann das Programm ohne eine überprüfung auch nicht wissen, ob was neues da ist.

Gedanken lesen kann Java leider nicht... und Datenbanken verschicken auch keine Mails an dein Java Programm, wenn Sie neue Elemente enthalten 🙂

Zum "merken" gibt es listen, Arrays, sets, textdatein... es würd ja genügen zu wisssen, ob die url doppelt ist...
 
Eine automatische Benachrichtigung funktioniert, wie schon gesagt wurde, nicht. Du könntest es so in der Art lösen:

Java:
Map<String, IrcBot> server = new HashMap<String, IrcBot>();

while(true){
   rs = stmt.executeQuery("SELECT * FROM server");
   while (rs.next()) {
       String server_url = rs.getString(1);
       if ( !server.contains(server_url) ) {
           int port = rs.getInt(2);
           IrcBot bot = new IrcBot();
           bot.connect(server_url,port);

           server.put(server_url, bot);
       }               
   }

   Thread.sleep(600000)
}

Oder du speicherst dir in der DB immer das Hinzugefügt-Datum, merkst dir das letzte Datum in deinem Programm und fährst dann direkt eine DB-Abfrage mit einer where-Einschränkung auf das letzte gemerkte Datum.
 
Zuletzt bearbeitet:
Mit einer Oracle könntest du UTL_HTTP oder UTL_TCP in Verbindung mit einem Trigger benutzen um nach einem INSERT deine Java App zu callen. MySQL kann das allerdigns nicht, könntest höchstens einen MySQL Proxy dazwischenschalten der bei einem INSERT deine Java App benachrichtigt.

MYSQL ::
 
Wenn Du das eintragen der IRC Server ebenfalls durch Dein Programm machst, dann würde es sich doch anbieten diese neu hinzugefügte Instanz direkt zu starten oder zumindest zu prüfen, was noch nicht läuft.
 

Neue Themen


Zurück
Oben