Der Code:ResultSet.getBlob() Ausnahme
ResultSet rs = null;
try {
conn = getConnection();
stmt = conn.prepareStatement(sql);
rs = stmt.executeQuery();
while (rs.next()) {
Blob blob = rs.getBlob("text");
byte[] blobbytes = blob.getBytes(1, (int) blob.length());
String text = new String(blobbytes);
Das Ergebnis:
java.sql.SQLException: Invalid column type: getBLOB not implemented for class oracle.jdbc.driver.T4CClobAccessor
at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:111)
at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:145)
at oracle.jdbc.driver.Accessor.unimpl(Accessor.java:357)
at oracle.jdbc.driver.Accessor.getBLOB(Accessor.java:1299)
at oracle.jdbc.driver.OracleResultSetImpl.getBLOB(OracleResultSetImpl.java:1280)
at oracle.jdbc.driver.OracleResultSetImpl.getBlob(OracleResultSetImpl.java:1466)
at oracle.jdbc.driver.OracleResultSet.getBlob(OracleResultSet.java:1978)
ich class12_10g.zip in meinem Klassenpfad haben. Ich habe gegoogelt und im Wesentlichen nur eine Seite zu diesem speziellen Problem gefunden, und es war nicht hilfreich bei.
Hat jemand irgendwelche Ideen dazu?
ein wenig Hintergrund: Wir waren eine unserer Datenbanken von MySQL zu Oracle konvertieren. Innerhalb der MySQL DB ist eines der Felder ein Langtext, der im Code als BLOB behandelt wird. Die SQL Developer Workbench konvertiert standardmäßig Longtext in CLOB (für mich sinnvoll), aber der Code erwartet Blob. Ich denke, der Fehler war nicht so gut: oracle.jdbc.driver.T4CClobAccessor (obwohl es Clob erwähnt).
Als ich versuchte, die folgenden:
rs = stmt.executeQuery();
while (rs.next()) {
byte[] blobbytes = rs.getBytes("text");
String text = new String(blobbytes);
}
es eine nicht unterstützte Ausnahme ausgelöst hat - alles, was ich in erster Linie zu tun hatte, die Typen in der neu erstellten Oracle DB leider war der Vergleich mit dem, was der Code erwartet hat (Ich habe nur angenommen, dass sie übereinstimmen würden).
Sorry Jungs! Nicht, dass ich viel in sie Gedanken gemacht habe, jetzt muss ich herausfinden, warum die ursprünglichen Entwickler für BLOB-Typen verwendet long
Ich würde stattdessen rs.getBinaryStream() verwenden, es ist zuverlässiger –