0

プロジェクトを構築していますが、Firebird データベースで作成した Blob フィールドで問題が発生しました。このフィールドは、ユーザーが入力するテキストの量を制限したくないフィールド観測を参照します。

しかし、問題があり、このフィールドを保存して読み取る方法がわかりません。

私はJDBCを使用してinsert prepareStatement stmt stmt.setを使用しています...

4

2 に答える 2

1

(aka )を使用している場合は、 and を使用できます。Firebird ドライバーは、それを blob との間で変換PreparedStatement.setString()します。接続文字セットが BLOB 文字セットと同じであることを確認する必要があります。そうしないと、正しくない文字セット変換が行われる可能性があります。ResultSet.getString()BLOB SUB_TYPE 1BLOB SUB_TYPE TEXT

他のオプションは、( を使用して) Clob を明示的に作成しConnection.createClob()、それをステートメントに設定するか、setCharacterStreamメソッドを使用することです。

于 2012-05-26T07:02:50.717 に答える
0

文字列をblobに変換するために、次のを見つけました。

//Convert String to Blob
String data = “hello world”;
java.sql.Blob blob = org.hibernate.Hibernate.createBlob(data.getBytes());

//Convert Blob to String
byte[] bdata = blob.getBytes(1, (int)blob.length());
String data1 = new String(bdata);

プリペアドステートメントについては、この例 をご覧ください。setBlobこれが一枚です。彼らの例から、あなたsetBlobPreparedStatement

java.sql.Blob blob = null;
try {
  conn = getConnection();
  // prepare blob object from an existing binary column
  pstmt = conn.prepareStatement("select photo from my_pictures where id = ?");
  pstmt.setString(1, "0001");
  rs = pstmt.executeQuery();
  rs.next();
  blob = rs.getBlob(1);

  // prepare SQL query for inserting a new row using setBlob()
  String query = "insert into blob_table(id, blob_column) values(?, ?)";
  // begin transaction
  conn.setAutoCommit(false);

  pstmt = conn.prepareStatement(query);
  pstmt.setString(1, "0002");
  pstmt.setBlob(2, blob);

  int rowCount = pstmt.executeUpdate();
  System.out.println("rowCount=" + rowCount);
  // end transaction
  conn.commit();
于 2012-05-25T16:02:56.433 に答える