Abfragen wenn das ende einer Tabelle erreicht ist

student86

Mitglied
Moin Moin,

Ich versuche gerade ein programm zu schreiben welches daten von einer Tabelle ( MS SQL ) in eine andere Tabelle ( Oracle) schreibt.

erster schritt ich filter alle daten aus der sql tabelle herraus welche ich brauche und schreibe diese in die Oracle Datenbank, dies funktioniert.

zweiter schritt wäre nun das alle 30 min nachgeschaut wird ob nun neue daten in der ms sql tabelle sind welche noch nicht in der oracle sind.

gibt es da einen fertigen befehl ? Weil die funktion die ich mir geschrieben haben funktioniert nicht richtig bzw dort fehlt mir der befehl der mir sagt das ich mit dem vergleichen am ende der Tabelle angekommen bin.
also if (!MSSQLWerte.equals(OracleWerte)&& "????letzter wert erreicht????")
{dann füge MSSQL wert in Oracle ein
}
 
wie kommst du denn an die Werte, welcher Java-Code ist beteiligt?
wenn du ResultSet, List oder ähnliche Darstellungen hast, dann doch auch hasNext()-Methode, size(), aktueller Index, Schleife usw.,
du kannst und musst wissen wo du bist

automatische Abgleichs kenne ich leider nicht
 
Merk den den letzten übertragenen Index bzw die Anzahl der übertragenen Zeilen. Setze dann einen Count(*) ab dann weisst du ob da was neues gekommen ist oder nicht.
 
Da gibt es je nach Struktur der Quelle unterschiedliche Verfahren.

Gibt es z.B. ein Feld, in dem ein TimeStamp gespeichert ist, kann man sich den
Letzten (Aktuellsten) merken und beim nächsten Lauf direkt per SQL-Statement
nur noch die Sätze herausfiltern, die neuer sind.

Für genauere Tipps wäre es daher nützlich zu wissen, wie die Quelltabelle aufgebaut ist.

VG ROlf
 
Schonmal vielen dank für die Hilfe.

Ich habe eine funktion welche mir das resultset der MS SQl Daten liefert und eine funktion welche mir das Resultset der schon vorhandenen daten in der Oracledatenbank liefert.

In die MS SQL Datenbak kann ich nicht reinschreiben da es sich dort um eine Schicht und nicht um eine Tabelle handelt. Davonabgesehe würde ich dies gerne lassen da diese datenbank mit einem weiteren programm verknüpft ist.

Kann man nicht irgendwie abfragen das wenn man mit seinem OracleWert.next() an letzter stelle angekommen ist er dann den MSSQLWert einfüt ?

.last() .islast() .wasNull() funktionieren alles nicht

dachte auch schon an if(.next()==false) einfügen; //.next() liefert true wenn ein wer druin steht aber nicht false wenn am ende der tabelle angelangt.....

da muss es doch irgendeinen simplen befehl geben ?
 
ein meiner ersten Antwort steht zweimal (), mit offensichtlich Methodennamen davor,

die kann man weiter ignorieren und weiter rätseln, oder eben nicht..


ein Blick in die API von ResultSet dauert auch nur Sekunden bis Minuten
ResultSet (Java Platform SE 6)

edit:
ah, verspekuliert, dabei wärs so schön 😉 keine hasNext()-Methode da,
ich schaue nun auch

edit:
also Richtung 'Anzahl Zeilen' gibts nichts in ResultSetMetaData, ein mehrfaches Durchlaufen zum Zählen ist auch nicht immer erlaubt,
da bleibt grundsäzlich
a) zunächst alle Daten in eine Liste übernehmen, eigene Datenstruktur, dann weiß man die Anzahl, aber vielleicht zu große Mengen
b) durchaus mit next() die nächsten Elemente jeweils abfragen, Rückgabewert boolean gibt Ende an,
Werte des nächsten Vergleichs zwischenspeichern, nicht ganz simpel an Arbeit,
ähnlich a), aber immerhin ohne beliebig große Datenmengen, nur die aktuellen 1-2 Zeilen balancieren
 
Zuletzt bearbeitet von einem Moderator:
Schonmal vielen dank für die Hilfe.

Ich habe eine funktion welche mir das resultset der MS SQl Daten liefert und eine funktion welche mir das Resultset der schon vorhandenen daten in der Oracledatenbank liefert.

In die MS SQL Datenbak kann ich nicht reinschreiben da es sich dort um eine Schicht und nicht um eine Tabelle handelt. Davonabgesehe würde ich dies gerne lassen da diese datenbank mit einem weiteren programm verknüpft ist.

Kann man nicht irgendwie abfragen das wenn man mit seinem OracleWert.next() an letzter stelle angekommen ist er dann den MSSQLWert einfüt ?

.last() .islast() .wasNull() funktionieren alles nicht

dachte auch schon an if(.next()==false) einfügen; //.next() liefert true wenn ein wer druin steht aber nicht false wenn am ende der tabelle angelangt.....

da muss es doch irgendeinen simplen befehl geben ?

Interessant für dich wäre auch das Statement-Objekt dir anzugucken. Dort musst du, wenn du mit dem Cursor hin und her springen willst, diverse Modi als Parameter übergeben.
Guck dir folgendes mal an, so ermittelst du die Anzahl der Zeilen :

Java:
          ResultSet _rResult;
         PreparedStatement pstmt = _cConn.prepareStatement       (sql,ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY);     
         //Die Modie hier spielen eine wichtige Rolle für den Befehl .absolute() 
         _rResult = pstmt.executeQuery();
         _rResult.absolute(-1);
         
         int i= _rResult.getRow();
         System.out.println("Anzahl ermittelter Zeilen +++++++++++++++ = "+i);
         _rResult.absolute(1);//identisch mit .first()
 
Zuletzt bearbeitet:
Danke für die anworten und Denkanstöße.

hab es nun hinbekommen.
es funktiert "recht einfach" mit der sql suchfunktion.

resultset aus tabelle 1 laden -->in String Ablage abspeichern -->result2 = SELECT * FROM TABELLE 2 Where Wert1 like 'Ablage' --> if (result2.next() schon vorhanden; else Ablage in Tabelle schreiben.
 

Zurück
Oben