Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden.
Du solltest ein Upgrade durchführen oder einen alternativen Browser verwenden.
Du solltest ein Upgrade durchführen oder einen alternativen Browser verwenden.
Java-JDBC Doppelte Einträge ignorieren?
- Ersteller Z3UZ
- Erstellt am
striker159
Lt. Junior Grade
- Registriert
- Dez. 2008
- Beiträge
- 327
INSERT OR IGNORE INTO table VALUES ...
sowas?
sowas?
- Registriert
- Mai 2007
- Beiträge
- 128
Also genau an sowas wie INSERT OR IGNORE INTO habe ich auch gedacht aber wenn ich das so anwende bekomme ich leider eine Exception die besagt:
java.sql.SQLSyntaxErrorException: ORA-00925: Schlüsselwort INTO fehlt
Um es genauer zu erklären:
1. Ich lese Daten aus meiner Datenbank aus und speichere diese in Java in einer Liste
2. Dann füge ich meiner Liste in meinem Programm weitere Daten hinzu
3. Diese neue Liste möchte ich dann wieder in die Datenbank speichern
Hoffe das erklärt es ein bisschen besser
java.sql.SQLSyntaxErrorException: ORA-00925: Schlüsselwort INTO fehlt
Ergänzung ()
Um es genauer zu erklären:
1. Ich lese Daten aus meiner Datenbank aus und speichere diese in Java in einer Liste
2. Dann füge ich meiner Liste in meinem Programm weitere Daten hinzu
3. Diese neue Liste möchte ich dann wieder in die Datenbank speichern
Hoffe das erklärt es ein bisschen besser
Zuletzt bearbeitet:
Es kommt drauf an, wofür das Ganze gedacht ist. Für n Hobbyprojekt kann man bestimmt das, was Hades vorschlägt, verwenden. Je nachdem, ob das ein einzelner Wert (bsp. Username) oder eine Klasse zum Abbilden des Datensatzes verwendet wird würden mir, auf die Schnelle, jetzt 2 Lösungsmöglichkeiten einfallen:
-) Caching der Datensätze: Sprich irgendwo im Speicher wird eine Kopie aller gelesenen Datensätze gehalten, damit nicht jedes Mal eine Lese-Operation auf die Datenbank durchgeführt werden muss. Somit könnte man einfach die Differenz zwischen Cache-Daten und Daten, die in die Datenbank geschrieben werden, bilden und diese dann einfach reinschreiben.
-) Jeder Datensatz, der aus der Datenbank in die Liste geladen wird, hat einfach ein boolean Flag, welches besagt "Ich steh bereits schon so in der Datenbank!". CUD-Operationen (Create, Update, Delete) würde das Flag auf False setzen. Beim Schreiben in die Datenbank braucht man nur über die Liste iterieren und die notwendigen Daten abspeichern.
-) Caching der Datensätze: Sprich irgendwo im Speicher wird eine Kopie aller gelesenen Datensätze gehalten, damit nicht jedes Mal eine Lese-Operation auf die Datenbank durchgeführt werden muss. Somit könnte man einfach die Differenz zwischen Cache-Daten und Daten, die in die Datenbank geschrieben werden, bilden und diese dann einfach reinschreiben.
-) Jeder Datensatz, der aus der Datenbank in die Liste geladen wird, hat einfach ein boolean Flag, welches besagt "Ich steh bereits schon so in der Datenbank!". CUD-Operationen (Create, Update, Delete) würde das Flag auf False setzen. Beim Schreiben in die Datenbank braucht man nur über die Liste iterieren und die notwendigen Daten abspeichern.
Rossie
Commodore
- Registriert
- Dez. 2010
- Beiträge
- 5.075
Datenbanken bieten durchaus das gewünschte Feature (INSERT IGNORE, WHERE ... NOT IN etc.). Man müsste halt wissen, um welche Datenbank es sich handelt, um auf die konkrete (bzw. korrekte) Syntax verweisen zu können. Wobei der TE die Syntax wohl auch in der mitgelieferten Hilfe nachschauen könnte...
DefconDev
Commander
- Registriert
- Jan. 2008
- Beiträge
- 2.540
Ich bin kein Experte, daher würde mich eine fundierte Meinung dazu interessieren, bezüglich des Beitrages von soares.
Ist es nicht um einiges langsamer INSERT IGNORE, WHERE ... NOT in einer Datenbank zu durchlaufen als, alle Records in eine Liste zu speichern und die neuen Daten, mit der Liste miteinander zu vergleichen, zu filtern und dann in die Db zu schreiben?
Ist es nicht um einiges langsamer INSERT IGNORE, WHERE ... NOT in einer Datenbank zu durchlaufen als, alle Records in eine Liste zu speichern und die neuen Daten, mit der Liste miteinander zu vergleichen, zu filtern und dann in die Db zu schreiben?
Rossie
Commodore
- Registriert
- Dez. 2010
- Beiträge
- 5.075
Hades85 schrieb:Ist es nicht um einiges langsamer INSERT IGNORE, WHERE ... NOT in einer Datenbank zu durchlaufen
Das sind zwei Möglichkeiten, das gewünschte zu erreichen. INSERT IGNORE unterstützt nicht jede Datenbank. Je nach Datenbank gibt es noch andere Möglichkeiten.
Verbindlich lässt sich die Frage nach der Performanz nicht beantworten, da hier viele Variablen eine Rolle spielen. Generell sind Datenbanken bei korrekter Verwendung aber durchaus (sehr) performant und ich würde SQL hier eigenem Code vorziehen. Im Zweifel fängt man sich eine neue Fehlerquelle ein, außerdem bedeutet es wesentlich mehr Aufwand. Falls man ein Performanzproblem haben sollte, kann man immer noch umschwenken. First make it work...
mental.dIseASe
Lieutenant
- Registriert
- Dez. 2008
- Beiträge
- 665
Da die neuen Entitaeten wohl noch keine ID haben, würde ich die Liste einfach durchtackern und die mit ID == null persistieren. Aber kann man bestimmt auch anders machen.
Ähnliche Themen
- Antworten
- 0
- Aufrufe
- 796
- Antworten
- 2
- Aufrufe
- 719
- Antworten
- 41
- Aufrufe
- 2.095