Datensatz / Tupel automatisch nach xy Tagen / Stunden löschen

Java.getSkill()

Aktives Mitglied
Hallo,

Ich frage mich gerade wie ich einen Datensatz, also einen Eintrag in einer Tabelle, nach XY Tagen oder Stunden automatisch löschen kann.

Als Beispiel nehme ich eine Bibliothek, wo ich mir Bücher zum Ausleihen vorreservieren kann. Nach der Reservierung habe ich 3h Zeit um das Buch abzuholen, sonst wird meine Reservierung gelöscht und Buch wieder ins System als ausleihbar gestellt.

Ich reserviere es um 13:00 und hätte nun bis 16:00 Zeit es abzuholen. Um 16:01 soll es gelöscht werden, doch wie? Trigger, Stored Procedure, Java??

Ich suche nach einer Lösung ohne Rootrechte oder irgendwelche anderen grösseren Spielereien.
 

Java.getSkill()

Aktives Mitglied
mysql aktuellste oder DB2 v9

wenn jemand sourcecode hätte, wäre das natürlich sehr nice :)

simple Sachen mit PL/SQL und java/jsp kann ich auch. Der Trick an der ganzen Sache ist eben, dass sich diese eine "Funktion" welche die Uhrzeiten vergleicht selber aufrufen muss. Einfach einen Knopf hinbauen, der einen Trigger oder Stored Procedure startet und gemütlich alle Tupel in der Tabelle durchschaut könnte ich mir wohl ohne grössere Probleme machen.
 

ice-breaker

Top Contributor
Es gibt keine Trigger für Selects, von daher müsste man da etwas mehr Aufwand in Kauf nehmen:
1. StoredProcedure die alte Daten löscht und den regelmäßig aufruft (MySQL hat in 5.1 intern nen Cron-Manager)
2. Beim Auslesen aus der Datenbank prüfen, ob der Datensatzz veraltet ist, aber noch nicht gelöscht wurde, dann ihn löschen und weiterbehandeln als wenn er von Anfang nicht existent war.
 

Java.getSkill()

Aktives Mitglied
Java:
create table zeitStunden(
id int not null,
von_zeit time not null,
bis_zeit time
)

insert into zeitStunden (id, von_zeit)values(2,current time - 3 HOURS)

select * from zeitStunden

delete from zeitStunden where von_zeit < current time
für die Nachwelt: DB2 Basics: Fun with Dates and Times

Bin selber noch am suchen: Wie starte ich auf einem Linux/mysql/DB2 Server, wo ich mich mit ftp oder ssh verbinden kann, also 0 weitere Rechte außer webspace für meine Daten, einen Cronjob, welcher eben jetzt alle 30 Minuten eine Tabelle mit SQL Statements durchpflügen kann

crontab -e kann ich schon mal aufrufen

Rufe ich da ein Stored Procedure auf? wenn ja wie? sind ja in der DB gespeichert?

oder rufe ich eine SQL FILE, welche sich mit user und pw connectet und dann eben die SQL Statements durchführt?

need einfach nur etwas code, kann auch ein simples insert sein, am besten mit einer schleife :)
 
G

Gast2

Gast
crontab -e kann ich schon mal aufrufen

Rufe ich da ein Stored Procedure auf? wenn ja wie? sind ja in der DB gespeichert?

oder rufe ich eine SQL FILE, welche sich mit user und pw connectet und dann eben die SQL Statements durchführt?

need einfach nur etwas code, kann auch ein simples insert sein, am besten mit einer schleife :)

Du müsstest schon deine StoredProcedure über einen SQL Befehl auslösen. Du kannst aber auch einfach dir ein kleines Javaprogramm anlegen das die StoredProcedure anstößt - allerdings kann das dann auch gleich den SQL für löschen alter Daten absetzten was die StoredProcedure unnötig macht ;)

Java:
String query = "CALL PURGE_JOB()";

Selbiges gilt für ein SQL File per shellskript laden.

Also wenn du einen cronjob einrichten darfst - lass alle drei stunden den SQL zum Löschen alter Daten von einem Programm oder Skript deiner Wahl abschießen.

In ORACLE gäbe es intern Möglichkeiten mit Hintergrundjobs ( DBMS_SCHEDULER), evlt gibt es da ja auch für DB2.
 
Zuletzt bearbeitet von einem Moderator:

kama

Top Contributor
Hallo,

ich würde auf keinen Fall eine solche Logik in die Datenbank packen. Dafür ist die Applikation zuständig...Ich würde eine Applikation haben die so etwas löst...Das kann man z.B. Quartz Scheduler - Home sehr schön lösen...
Ich gehe davon aus, dass sowieso eine Applikation läuft....
Das ganze ist dann auch unabhängig von der Datenbank....

MfG
Karl Heinz Marbaise
 

tme

Aktives Mitglied
Also ich frage mich ja, warum es notwendig ist, überhaupt eine zeitgesteuerte Ausführung für die Löschung zu haben. Will jemand Anderes das Buch ausleihen, läßt sich doch herausfinden, ob man es herausgeben darf:

Java:
Calendar cal = new GregorianCalendar();
cal.subtract(3, Calendar.HOUR);
strQuery = "SELECT * FROM Reservierungen WHERE created > '" + FormatSQLDate(cal) + "';";

Frei nach Schnauze und nicht geprüft, die Logik ist aber IMHO korrekt.

Falls die Datensätze trotzdem in jedem Falle dort raus sollen, und das ist bei indizierten Zugriffen nicht unbedingt nötig, könnte ein von dieser Logik separater Löschprozeß diese Aufgabe übernehmen.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
F SQLite Datensatz löschen Datenbankprogrammierung 13
B Mit Button einen Datensatz löschen Datenbankprogrammierung 2
S sql query, um bestimten datensatz zu finden Datenbankprogrammierung 33
D MySQL Neuen Datensatz mit "new" anlegen Datenbankprogrammierung 16
E Nur der letzte Datensatz wird in Tabelle geschrieben Datenbankprogrammierung 4
M Serienbrief aus Datensatz Datenbankprogrammierung 2
E Aufzählung liest nur ersten Datensatz Datenbankprogrammierung 14
S SQLite Selectanfrage lieft datensatz aber cursor ist leer Datenbankprogrammierung 2
M Designfrage zu Rows die sich auf einen Datensatz derselben Tabelle beziehen Datenbankprogrammierung 7
A MySQL Datensatz wird nicht richtig gelöscht Datenbankprogrammierung 6
L SQLite fügt nur den ersten Datensatz ein Datenbankprogrammierung 2
C Hibernate Datensatz löschen Datenbankprogrammierung 2
M Access Datensatz beinhaltet ESC-Zeichen Datenbankprogrammierung 3
U Nur den ersten Datensatz löschen wenn mehrere gleiche da sind Datenbankprogrammierung 2
C Gleichzeitiger Zugriff auf Datensatz Datenbankprogrammierung 5
Eldorado MySQL Hibernate - neuen Datensatz einfügen Datenbankprogrammierung 2
M Datensatz exklusiv öffnen Datenbankprogrammierung 5
M design issue: datensatz lange locken? Datenbankprogrammierung 10
M Datensatz aus Datenbank löschen Datenbankprogrammierung 6
T Theoriefrage : mehrere User vs gleichen Datensatz Datenbankprogrammierung 4
K Schnelle Methode um zu testen ob Datensatz existiert Datenbankprogrammierung 9
R datenbank - datensatz sucjen Datenbankprogrammierung 4
-MacNuke- Hibernate löscht jeden Datensatz einzeln? Datenbankprogrammierung 12
V Doppelten Datensatz vermeiden? Datenbankprogrammierung 7
S Überprüfen ob Datensatz existiert Datenbankprogrammierung 2
P SQL, nur jeder 5. Datensatz Datenbankprogrammierung 9
B Eingefügter Datensatz erneut abfragen. Datenbankprogrammierung 10
J Anzeige Button gibt immer nur 1. Datensatz aus DB aus Datenbankprogrammierung 8
M Letzter Datensatz mit auslesen(brauch kleinen Tipp) Datenbankprogrammierung 15
N SELECT: Datensatz sperren Datenbankprogrammierung 6
C vorheriegen oder letzten Datensatz Datenbankprogrammierung 2
K ResultSet: Erste Zeile ausgeben, Datensatz in String speiche Datenbankprogrammierung 13
W Nur ein Datensatz wird angezeigt, obwohl mehrere existieren Datenbankprogrammierung 7
C Datensatz einfügen und quittierung Datenbankprogrammierung 31
H letzter Datensatz wird nicht gefunden? Datenbankprogrammierung 6
F suche MySQl-Befehl um Datensatz an Tabellenende zu schreiben Datenbankprogrammierung 2
D Mit Trigger Tupel löschen verhindern Datenbankprogrammierung 3
B Es werden keine Tupel in Tabellen abgelegt Datenbankprogrammierung 2
F Tabellen automatisch erstellen wenn sie nicht existieren Datenbankprogrammierung 6
F MySQL+ Netbeans: Datenbanken mit Automatisch generierten Entity Classes get und set Datenbankprogrammierung 2
M HSQLDB Automatisch nächste freie Nummer ausgeben Datenbankprogrammierung 4
Hartigan Datenbankverbindung automatisch aktualisieren Datenbankprogrammierung 3
Eldorado Hibernate - Objekte automatisch comitten Datenbankprogrammierung 2
N Trennt sich die Verbindung zur DB (MySQL) automatisch? Datenbankprogrammierung 3
G Primary key automatisch hochzählen Datenbankprogrammierung 9
P ID automatisch erhöhen Datenbankprogrammierung 7
L Letzte, automatisch erzeugte, ID via SQL erhalten Datenbankprogrammierung 6
M werden executeBatch()-commandos automatisch commitet ? Datenbankprogrammierung 8
G Update Statement automatisch unterteilen lassen Datenbankprogrammierung 3
H Sql Statements automatisch generieren lassen Datenbankprogrammierung 2

Ähnliche Java Themen

Neue Themen


Oben