Die folgende Frage beantwortet nicht die ursprüngliche Frage 'Wie schreibe ich eine benutzerdefinierte Long-Klasse, um lange Werte in Oracle zu handhaben', aber kann hilfreich sein, den Fehler 'Stream wurde bereits geschlossen' zu vermeiden, wenn Oracle lange rohe Spalten abgefragt wird.
Wir haben diesen Fehler mit einer Legacy-Datenbank festgestellt, ohne dass der Spaltentyp geändert werden konnte. Wir verwenden Spring mit hibernate3 session factory und transaction manager. Das Problem trat auf, wenn mehr als eine Task gleichzeitig auf das DAO zugreift. Wir verwenden ojdbc14.jar Treiber und versuchten einen neueren ohne Glück.
Die Einstellung useFetchSizeWithLongColumn = true in den Verbindungseigenschaften für den OJDBC-Treiber löste das Problem. Siehe die OracleDriver API
Dies ist nur eine Eigenschaft. ES SOLLTE NICHT MIT ANDEREN TREIBERN VERWENDET WERDEN. Wenn diese Option auf "true" gesetzt ist, wird die Leistung beim Abrufen von Daten in einer SELECT-Datei verbessert, aber das Standardverhalten für die Behandlung von LONG -Spalten wird so geändert, dass mehrere Zeilen abgerufen werden (Prefetch-Größe). Es bedeutet , dass genügend Speicher zugewiesen wird, um diese Daten zu lesen. Also, wenn Sie diese Eigenschaft verwenden möchten, stellen Sie sicher, dass die LONG-Spalten, die Sie abrufen sind nicht zu groß sind oder Sie nicht genügend Arbeitsspeicher haben. Diese Eigenschaft kann auch als Java-Eigenschaft festgelegt werden: java -Doracle.jdbc.useFetchSizeWithLongColumn = true myApplication
habe ich versucht, durch Hibernate Usertype für lange Umsetzung aber noch denselben Fehler, verursacht durch: java.sql.SQLException: Strom wird bereits closed.Can jemand empfehlen, mich in um diesen Fehler zu vermeiden? – user1316131
Kurz bevor Sie etwas anspruchsvolleres ausprobieren ... Haben Sie den neueren JDBC-Treiber ausprobiert? – Anonymous
Und noch eine Sache, Hibernate holt die Spalten aus dem 'ResultSet', wie sie benötigt werden. Wäre es in Ordnung, zuerst die 'LONG RAW'-Spalte zu bekommen? (Oracle geht davon aus, dass auf die Spalten in der Reihenfolge von links nach rechts zugegriffen wird und die Datenströme werden geschlossen, wenn auf die Spalten nach den Stream-Spalten zugegriffen wird) – Anonymous