O
OliverG
Gast
Hi,
ich möchte ein Blob aus einer Oracle DB in eine MySQL DB portieren.
Ich nutze folgende Treiber:
Ich bin dabei bisher wie folgt vorgegangen (verkürzter Code):
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):
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.
ich möchte ein Blob aus einer Oracle DB in eine MySQL DB portieren.
Ich nutze folgende Treiber:
Code:
Class.forName("com.mysql.jdbc.Driver").newInstance();
Class.forName("oracle.jdbc.driver.OracleDriver").newInstance();
Ich bin dabei bisher wie folgt vorgegangen (verkürzter Code):
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):
Code:
error on updating blob: com.mysql.jdbc.PacketTooBigException: Packet for query is too large (4438663 > 1048576)
Ich wäre Euch sehr dankbar, wenn Ihr evtl. einen Tipp habt.