- - PR -
JDBCでのSQL発行
1
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2005-04-20 10:56
いつもお世話になっております。
JDBCでoracle9iで接続しているのですが、 updateを PreparedStatement preparedStatement = null; preparedStatement = con.prepareStatement(SQL文); preparedStatement.executeUpdate(); で行うと java.sql.SQLException: ORA-22295: 4000バイトを超えるデータは、1つの文でLOBおよびLONG列にバインドできません。 というエラーがでます。 原因はSQL文が4000バイトを超えているのだと推測できるのですが、 どうしても4000バイト超えてしまうSQL文なのでどうしていいか困っています。。 どなたかいい対策があれば教えてください。 | ||||
|
投稿日時: 2005-04-20 12:15
私の場合、カラムを分割して、保存する方法を採用しました。 保存するときは、対象文字列を2000Byte毎に分割して 保存するという面倒な処理が入りますが。 big_col varchar2(6000) ↓ col1 varchar2(2000) col2 varchar2(2000) col3 varchar2(2000) こんな感じ。 もしくは、BLOB等のデータ型を使用してもいいのではないでしょうか。 | ||||
|
投稿日時: 2005-04-21 10:47
直接の回答ではないのですが。
ヒーローさんの投稿内容からは、どうしても(明示されていない)SQL文の文字列としての長さが 4000 文字を越えているとしか読めません。 DB に関係するご質問の場合は、SQL 文そのものの明示と、参照/更新対象となるテーブルの構造を書かれることを、強くお奨めします。 ここでようやく本題です ![]() なっかむさんが回答されたことですし、既にご存知と思いますが、Oracle 9i では char で 2000 バイト、varchar で 4000 文字(バイトと文字を区別して扱っていることにご注意ください)しか格納できません。 これを越えるサイズであれば、テキストならば CLOB、バイナリを含むなら BLOB 型を使うのが自然であると考えます。 回避策としてなっかむさんの挙げられた分割もありますが、本質的でない分割・結合処理が入り込んでしまうので、私はお奨めしません。 |
1