0

我正在构建一个项目,但遇到了在数据库 Firebird 中创建的 Blob 字段的问题。这个字段是指一个字段观察,我不想限制用户输入的文本数量。

但是我有一个问题,不知道如何保存和阅读该字段。

我正在使用 JDBC 使用 insert prepareStatement stmt stmt.set ... - 对于 blob 不知道该怎么做,也不知道如何转换字段的字符串值

4

2 回答 2

1

您可以使用PreparedStatement.setString()and如果您使用(aka ) ResultSet.getString(),Firebird 驱动程序将为您将其转换为 blob 或从 blob 转换。您确实需要确保您的连接字符集与 blob 字符集相同,否则您可能会得到不正确的字符集转换。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以获取准备好的语句。这是一块。从他们的示例看来,您可以setBlob调用PreparedStatement

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 回答