SQLite Datensatz löschen

f10

Aktives Mitglied
Hallo zusammen,

ich habe mir eine Swing-Applikation geschrieben in der ich Daten aus einer SQLite Datenbank in einer JTable anzeige. Nun kann ich die Daten auch löschen. Zumindest während der Laufzeit. Denn wenn ich die Action für das Löschen des Datensatzes ausführe, dann ist er auch für meine Anwendung gelöscht, doch schaue ich mit dem SQLite-Manager in die Datenbank, dann ist der Datensatz noch verhanden, und auch sobald ich meine Anwendung neu starte, ist der Datensatz wieder da. Wie kann das sein? Kann mir das jemand erklären?

Die Connection schließe ich, wenn ich das Fenster schließe. Allerdings reiche ich die Connection innerhalb der Anwendung hin und her, kann es damit zusammenhängen? Wie funktioniert das denn bei SQLite? Werden Transaktionen erst in der Datenbank persitent gespeichert, wenn diese geschlossen wird, schließlich ist es auch nur eine Datei. Wird während der Laufzeit eine temporäre Datenbank erzeugt? Wieso sind die Daten innerhalb meiner Anwendung gelöscht, aber in der Datenbank nicht? Hat jemand eine Vermutung?

SQL was per connection.executeUpdate() geschickt wird, sieht wie folgt aus:

Code:
DELETE FROM table_name WHERE text = 'XYZ';

LG
f10
 
Fliegt vielleicht eine Exception, welche nicht ausgegeben/geloggt wird?
Hast du das Statement schon mal direkt gegen die Datenbank probiert?
Wird das Statement überhaupt ausgeführt?
Hast du den Debugger schon verwendet?
 
Fliegt vielleicht eine Exception, welche nicht ausgegeben/geloggt wird?
Hast du das Statement schon mal direkt gegen die Datenbank probiert?
Wird das Statement überhaupt ausgeführt?
Hast du den Debugger schon verwendet?

Exceptions fliegen nur, wenn ich Datensätze hinzufüge, die schon vorhanden sind wegen der UNIQUE Clause.

Auf der Datenbank funktioniert es, hab es mir auch von der Management Software mal generieren lassen, dachte zuerst SQLite hat einen besonderen SQL Dialekt, aber ist genau das gleiche Statement.
Ob es ausgeführt wird, ist die Frage, innerhalb der Anwendung ist der Datensatz ja gelöscht, und das realisiere ich eigentlich nur mit einem löschen in der Datenbank und dann die Anzeige neu laden. Also ich entferne nicht in der Anwendung eine Objektrepresentation oder ähnliches.

Welchen Debugger meinst du? Die Methode wird ausgeführt, hab ich mit System.out.println()'s überprüft.
 
Also neue Einträge kannst du hinzufügen und das bleibt auch wenn du die Anwendung beendest und wieder startest. Nur beim Löschen geht es nicht?
 
Das macht keinen Sinn. Was passiert wenn du nach dem Löschen erst noch was einfügst und dann beendest und neu startest? Ist dann der gelöschte UND der neue Eintrasg da?
 
Das macht keinen Sinn. Was passiert wenn du nach dem Löschen erst noch was einfügst und dann beendest und neu startest? Ist dann der gelöschte UND der neue Eintrasg da?

Ich glaube, wir kommen dem Fehler auf die Spur. In diesem Fall, ist nur der 2. Eintrag da. Der gelöschte, bleibt gelöscht.

Welche Gründe kann das haben? Einen neuen Eintrag realisiere ich über ein JDialog dem ich die Connection aus meinem Hauptframe mitgebe. Hängt es damit zusammen?
 
Bei sqLite kannst du nicht mit mehreren Connections arbeiten. Das ist generell erstmal nicht multi-user fähig, was du bei mehreren connections ja quasi machen würdest. Du must schon immer die gleiche eine Connection benutzen oder diese jedesmal auf- und wieder zumachen
 
Bei sqLite kannst du nicht mit mehreren Connections arbeiten. Das ist generell erstmal nicht multi-user fähig, was du bei mehreren connections ja quasi machen würdest. Du must schon immer die gleiche eine Connection benutzen oder diese jedesmal auf- und wieder zumachen

Theoretisch ist es ja nur eine, die halt durchgereicht wird von Frame zu Dialog und zurück etc


Also doch, weil ich die Connection weiterreiche?

Heißt bei SQLite muss ich jedesmal eine neue Connection zur Datenbank aufbauen?

Gibt es eine Erklärung dazu, warum das nicht geht? Hängt das mit den Dateiattributen zusammen?
 
Weiterreichen im Sinne von

Code bspw in MyFrame.java
Java:
public Connection getConnection(){
return this.connection;
}

Code bspw in MyDialog.java
Java:
public MyDialog(MyFrame myFrame){
this.connection = myFrame.getConnection();
}

?
Dann hab ich es eigentlich auch so gemacht...
 
Schau dir halt einfach mal genau an was anders ist als beim Insert. Irgendwas muss fehlen. Vielleicht machst du die Connectiohn danach doch nicht zu oder was auch immer. Im Notfall must du halt step by step mit dem Debugger durch.
 
Schau dir halt einfach mal genau an was anders ist als beim Insert. Irgendwas muss fehlen. Vielleicht machst du die Connectiohn danach doch nicht zu oder was auch immer. Im Notfall must du halt step by step mit dem Debugger durch.

Ja, notfalls fliegt halt nochmal ein großer Brocken Code raus. Danke jedenfalls für die Unterstützung.
 

Neue Themen


Zurück
Oben