1

では、行きましょう...

ストアド プロシージャ (PL/SQL) を呼び出そうとしていますが、パラメータの 1 つが BLOB ですが、OracleCallableStatement を実行すると次のエラーが発生します。

java.sql.SQLException: データ サイズがこの型の最大サイズを超えています

それはああ、とてもイライラします..

私は次のことをしようとしましたが、失敗しました...

oracleCallableStatement.setBinaryStream(3, new ByteArrayInputStream(someByteArray), someByteArray.length);

次の場合と同じエラーが発生します。

oracleCallableStatement.setBytes(3, someByteArray);

次のようなWebページを読んだので、Oracleドライバーも変更しました。

http://www.coderanch.com/t/457770/JDBC/databases/java-sql-sqlexception-data-size

バグがあるとのことで、ojdbc5.jar に更新しました

しかし、問題は永続的です

DB は Oracle 11g です JavaEE は Glassfish 2.1 で実行されている 1.5 です

まあ、それだけだと思います。私の someByteArray は 4Gb を超えていません! 長さは 38678 です

編集:実行前に例外が発生しています..OracleCallableStatementの属性を設定すると発生します

スタック トレースの一部:

at oracle.jdbc.dbaccess.DBError.throwSqlException(DBError.java:134)
at oracle.jdbc.dbaccess.DBError.throwSqlException(DBError.java:179)
at oracle.jdbc.ttc7.TTCItem.setArrayData(TTCItem.java:103)
at oracle.jdbc.dbaccess.DBDataSetImpl.setBytesBindItem(DBDataSetImpl.java:2484)
at oracle.jdbc.driver.OraclePreparedStatement.setItem(OraclePreparedStatement.java:1224)
at oracle.jdbc.driver.OraclePreparedStatement.setBinaryStream(OraclePreparedStatement.java:2710)

編集

それで、こんにちは、これをここに置きます...私が間違っている場合は教えてください。削除します...

someByteArray は、 someString.toByteArray() から取得した配列でした

その文字列は、Base64 でエンコードされた (編集: jpeg と言うために使用される) PNG 画像の表現を保持していました...

そのため、sun.misc.BASE64Decoder のメソッドを使用して、someString から someByteArray を取得しました...次に使用しました

oracleCallableStatement.setBinaryStream(3, new ByteArrayInputStream(someByteArray), someByteArray.length);

そして、それは魅力のように機能しました..

BUUUT... sun.misc のクラスの使用は推奨されません。詳細については、こちらをお読みください。

byte[] を取得するための作業 sun.misc.BASE64Encoder/Decoder

しかし!!!

それは、最初のバイト配列をパラメーターに入れることができなかった理由の謎と、不可解な例外「java.sql.SQLException: データサイズがこの型の最大サイズよりも大きい」の謎を解決しません...

編集:

このエラーが再び発生しました...今回はすべて問題ありませんでした.base64を正しくデコードしていましたが、「java.sql.SQLException:この型の最大サイズよりも大きいデータサイズ」が返され続けました...

編集:

それはドライバーでした。サーバーとアプリで変更し、再デプロイしたところ、すべて正常に機能しました...

4

2 に答える 2

1

それはドライバーであることが判明し、質問で述べたように ojdbc5.jar に変更し、Alex Poole が指摘したように、Web サーバーが古いものではなく正しいものを選択したことを確認する必要があり、問題は解決しました。

于 2013-04-17T19:00:35.047 に答える