![]() |
| | Themen-Optionen | Thema durchsuchen |
| | Nach oben #1 |
| Gast
Beiträge: n/a
|
Hallo erstmal ich hab da ein kleines, oder Größeres Problem. Ich fang einfach aml an-hehe Also ich habe eine Textdatei, welche eine Tabelle enthält die ich per Filereader zeienweise auslese und mit Stringtokenizer anschließend "zerteile". Aus den werten jeder Zeile kerzeuge ich so jedesmal (also für jede Zeile ein Objekt mit diesen Werten als Parameter und speicher so alle diese Objekte in einem Vektor ab. Da es sich bei dieser Tabelle um etwa 2000 Zeilen handelt, weiß ich schonmal nicht, ob da ein Vector die optimale Lösung ist. Jetzt möchte ich die Tabelle aus der Textdatei in eine Datenbank übernehmen. Das problem, bzw die Denklücke, die ich grad nicht schaffe zu überwinden ist folgende: Diese Textdatei wird alle 2 wochen aktualisiert, enthält somit sowohl die alten, als auch die neuen Datensätze. Ich möchte jetzt jedoch nur die neuen zusätzlich in die Datenbank aufnehmen. Meine Frage ist jetzt, zu welchem Zeitpunkt ein vergleich am zeitsparensten ist und va. wie? Zunächst hatte ich die Idee, die datenbank in einem resultset abzufragen, dann jedes result in einem Vector zu speicher und anschließend für jedes element der Textdatei abzufragen, ob dies in dem Vector vorhanden ist, wenn nicht soll es eingetragen werden. Allerdings finde ich dese Lösung wahnsinnig rechenintensiv, sodass es doch andere möglichkeiten geben muss???? Ich wäre Euch für ein paar Denkansätze sehr dankbar! Haut in die Tasten, mfg Stefan |
|
| | Nach oben #2 |
| Neuer Benutzer Registriert seit: 14.10.2004
Beiträge: 25
|
Ich bin zwar kein DB-Crack, aber ich denke, dass eingebettete PL/SQL funktionen sehr schnell sind. Und ich nehme an, dass es schneller geht wenn du autocommit ausstellst und alles auf einmal committest (was für ein Denglisch Ich würde dir allerdings vorschlagen für neue Einträge eine andere textdatei anzulegen, und in deinem Programm die einträge aus der neuen textdatei nach dem DB-update in die alte zu übertragen, und den inhalt der neuen zu löschen. Trotzdem habe ich mal eine Beispiel-Funktion in PL/PgSQL geschrieben (ist in anderen DBMSystemen sicher ähnlich Code: CREATE OR REPLACE FUNCTION datenbank.wenn_fehlt_eintragen(deine_parameter)
RETURNS BOOLEAN AS
$$
DECLARE
BEGIN
IF ( EXISTS (SELECT * FROM datenbank.deine_tabelle WHERE dein_schluessel=dein_schluessel_parameter ) THEN
RETURN FALSE;
END IF;
INSERT into datenbank.deine_tabelle VALUES(deine_parameter);
RETURN TRUE;
END;
$$ LANGUAGE plpgsql;
Die Dollar-Zeichen sind glaube ich nur bei Postgres üblich. Das was dazwischen steht ist ein String, nur dass man dazwischen nicht escaped schreiben muss. Viele Grüße, Max |
| | |
| | Nach oben #3 |
| Gast
Beiträge: n/a
|
Hey Max, danke für die Antwort schonmal vorweg. Das mit dem "if exists..." is ne gute Idee, muss nur mal sehen wie ich das in Java machen, weil ich da ja nur resultsets bei ner sql abfrage bekomme, aber mit nem boolean geht das schon irgendwie. Das mit den 2 Textdateien, also immer nur die neuen in eine geht leider nicht, da die Textdatei von einem Programm automatisch erstellt wird udn somit immer alles enthält. |
|
![]() |
| Lesezeichen |
| Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1) | |
| Themen-Optionen | Thema durchsuchen |
| |
Ähnliche Themen | ||||
| Thema | Autor | Forum | Antworten | Letzter Beitrag |
| Neue iPods - The Beat Goes On | Bleistift | Nachrichten | 0 | 05.09.2007 20:56 |
| Neue XAMPP 1.5.4 Version fuer Linux und Windows | Jann Hendrik | Nachrichten | 0 | 11.09.2006 16:22 |
| Neue Tastatur für schnelleres schreiben | Corvin | Nachrichten | 12 | 03.01.2006 15:35 |
| Neue PHP "release candidates": PHP 4.4.2 RC 1 und PHP 5.1 RC 6 | Ben | Nachrichten | 1 | 21.11.2005 20:48 |
| "weiches" Einfügen von Components | Sym | Desktop-Applikationen und Grafik | 1 | 03.07.2004 23:13 |