# Oracle Blob in MySQL Blob umwandeln



## OliverG (25. Mai 2004)

Hi,

ich möchte ein Blob aus einer Oracle DB in eine MySQL DB portieren.

Ich nutze folgende Treiber:

```
Class.forName("com.mysql.jdbc.Driver").newInstance();
Class.forName("oracle.jdbc.driver.OracleDriver").newInstance();
```

Ich bin dabei bisher wie folgt vorgegangen (verkürzter Code):

```
// ... resultSet von Oracle DB holen ...
Blob blob = resultSet.getBlob("C_POINTS"); // (der java.sql.Blob)

// ... ein insert für nicht-binäre Datentypen zur MySQL DB - klappt auch prima ...

// ... updaten der binären Daten, also des Blobs zur MySQL DB
c.updateBlob(MYSQL, "t_layers", "c_points", entry.getC_POINTS()); // MYSQL (1) ist eine Konstante, damit die Methode weiss, ob sie Operationen auf der MySQL oder Oracle DB ausführen soll.


// und irgendwo habe ich dann ne Methode updateBlob; dBServer kann ORACLE (0) oder MYSQL (1) sein
public void updateBlob(int dBServer, String table, String column, Blob data) {
        try {
            PreparedStatement ps = connections[dBServer].prepareStatement("update " + table + " set " + column + "=?");
            ps.setBlob(1, data);
            ps.execute();
        } catch (SQLException e) {
            System.err.println("error on updating blob: " + e);
        }
    }
```

Dabei gibt es aber 2 Probleme:

1) Ich weiss nicht, ob ich dann in der MySQL Tabelle einen wirklich gültigen Blob drinne stehen habe,
oder ob da nicht sowas, wie ein Header fehlt, bevor die wirklichen Daten anfangen. Bei den Oracle Blobs steht glaube ich immer sowas davor "oracle.sql.BLOB@152513a", also steht vielleicht bei den MySQL Blobs sowas davor mysql.sql.BLOB@152513a  ??? 
Ich habe leider keine genaue Beschreibung des Formats der jeweiligen Blobtypen gefunden. Wer etwas dazu weiss - her damit.

2) JDBC bzw. der MYSQL Treiber mag anscheinend nicht mehr als 1 MB in einen Blob schreiben, denn ich bekomme nämlich für Blobs, die grösser als 1 MB sind folgende Exception (typ des blobs in der MySQL DB ist longblob): 

```
error on updating blob: com.mysql.jdbc.PacketTooBigException: Packet for query is too large (4438663 > 1048576)
```
Anmerkung: Ich habe es anstatt mit den get-/ setBlob() Methoden auch schon mit den get-/ setBytes Methoden von den Blobs probiert -> selbes Problem.


Ich wäre Euch sehr dankbar, wenn Ihr evtl. einen Tipp habt.


----------



## nollario (25. Mai 2004)

hi!

ich hatte schon mal ein ähnliches problem mit mysql... da wollte ich objekte als blobs in die datenbank einfügen. das ging aber nicht, da die paket grösse für mysql zu groß war... sybase konnte damals...

liegts vielleicht auch daran? also quasi kein kompatibilitätsproblem, sondern eine mysql einschränkung?

saludos

christian


----------



## Guest (26. Mai 2004)

Ja thx. Das Problem mit der Grösse war tatsächlich eine fehlerhafte Einstellung in der my.cnf von mysql. Habe die maximale Packetgrösse hochgesetzt und jetzt funktioniert es wunderbar. Jetzt muss ich nur noch schauen, dass der Inhalt auch passt.


----------

