PostgreSQL DatenExport

capri

Mitglied
Hallo Forum,

ich möchte bestimmte Daten (nicht komplette DB) aus PostgreSQL auslesen und in Oracle einfügen.

Ich mache zunächt meine Abfrage (wie z.B. im Code unten) und Speichere die Ergebnistabelle in ResultSet. Jetzt muss ich die Daten aus dem ResultSet auspacken, um diese anschließend in ein "INSERT"- Befehl für Oracle einzubinden.

Meine Frage: Wie Speichere ich die Daten aud dem ResultSet am sinnvollsten? Welche Struktur soll ich (List, Map, etc.) hierzu nutzen?

Code:
public void transport(){
String query = "SELECT * FROM public." + tName;
     
Statement st  = new Statement();
ResultSet rs = st.executeQuery(query);
}

Schönen Dank im Voraus!
capri
 

mihe7

Top Contributor
Sollte in etwa so funktionieren:

Java:
static final String query = "SELECT username, realname FROM users";
static final String insert = "INSERT INTO usertable(username, realname) VALUES (?, ?)";

void transferUsers(Connection dest, Connection source) throws SQLException {
    dest.setAutoCommit(false);
    try(PreparedStatement pstmt = dest.prepareStatement(insert)) {
      try(Statement stmt = source.createStatement()) {
        try(ResultSet rs = stmt.executeQuery(query)) {
            int chunk = 0;
            while (rs.next()) {
                pstmt.setString(1, rs.getString(1));
                pstmt.setString(2, rs.getString(2));
                pstmt.addBatch();
                chunk++;
                if (chunk == 1000) {
                    pstmt.executeBatch();
                    chunk = 0;
                }
            }
            dest.commit();
        }
    }
}
 

httpdigest

Top Contributor
Kleiner Hinweis:
Java:
try(PreparedStatement pstmt = dest.prepareStatement(insert)) {
  try(Statement stmt = source.createStatement()) {
    try(ResultSet rs = stmt.executeQuery(query)) {
Kann auch geschrieben werden mit nur einem try-with-resources:
Java:
try(PreparedStatement pstmt = dest.prepareStatement(insert);
    Statement stmt = source.createStatement();
    ResultSet rs = stmt.executeQuery(query)) {
Ist aber wohl Geschmackssache.
 

capri

Mitglied
Hallo zusammen,

vielen lieben Dank für Eure sehr hilfreiche Antworten.
Ich werde das nachher ausprobieren und mich ggf. noch mal melden.

Eine Frage habe ich aber schon jetzt: Bei mir in den Tabellen sind nicht nur Strings (also VARCHAR), sondern auch Integer (in Oracle NUMBER) oder Text (In Oracle CLOB) vorhanden. Kann ich den Code analog lassen, nur dass ich für Integer-Spalten getInteger () Methode nehme? Und wie soll ich bei CLOB vorgehen? Kann ich auch mit getString () darauf zugreifen?

Noch mal schönen Dank!
capri
 

mihe7

Top Contributor
Den Code musst Du natürlich anpassen. Wie, hängt davon ab, wie "kompatibel" die zwei Tabellen zueinander sind.
LOBs wirst Du ggf. separat behandeln müssen (WIMRE war Oracle da recht speziell, ist aber schon eine Ewigkeit her).
 

capri

Mitglied
Hallo mihe7,

ich habe soeben eine Tabelle mit Deinem Code (verändert) von PostgreSQL-DB in die Oracle-DB transportiert. Hat alles sehr gut funktioniert, noch mal vielen Dank für den Tipp!

Mit LOBs werde ich mich gleich auseinandersetzten müssen.

Gruß, capri
 

Neue Themen


Oben