1

clobデータをmysqlデータベースに挿入しています...これが私のコードです

Clob cl=dbCon.createClob();
cl.setString(1,userAbout);
dbCon.setAutoCommit(false);
PreparedStatement insertClob=dbCon.prepareStatement("UPDATE user_data SET user_about=? WHERE user_id=?");
insertClob.setClob(1,cl);
insertClob.setInt(2,userId);
int count= insertClob.executeUpdate();
if(count==1){dbCon.commit();dbCon.close();out.write("success");}
else{dbCon.rollback();dbCon.close();out.print("error");}

これは例外をスローしています

java.lang.AbstractMethodError: org.apache.tomcat.dbcp.dbcp.PoolingDataSource$PoolGuardConnectionWrapper.createClob()Ljava/sql/Clob;

ここで問題は何ですか?どうすればそれを解決できますか?

4

1 に答える 1

6

とにかく必要ありませcreateClob()ん。setCharacterStream()を使用すると、はるかに安定します(そして、すべてのJDBCドライバーではるかによくサポートされます)。

StringReader reader = new StringReader(userAbout);
PreparedStatement insertClob = dbCon.prepareStatement("UPDATE user_data SET user_about=? WHERE user_id=?");
insertClob.setCharacterStream(1, reader, userAbout.length());
insertClob.setInt(2,userId);

int count= insertClob.executeUpdate();

これはINSERTステートメントでも機能します。中間のclob(またはblob)オブジェクトを作成する必要はありません。

ステートメントのプレースホルダーと一致するように、間違ったインデックス8を正しいインデックスに変更したことに注意してください。2UPDATE

setString()最近の多くのドライバーは、CLOB列に対しても同様に「単純」を処理します。試してみる価値があります-コードをさらに減らすでしょう。

于 2013-01-12T16:55:22.540 に答える