插入和恢复 BLOB 值 子类型 = 文本字段 火鸟爪哇



我正在构建一个项目,遇到了一个问题使用我在数据库 Firebird 中创建的 Blob 字段。此字段将引用现场观测值,该字段我不想限制用户将输入的文本量。

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

我正在使用 JDBC 来使用插入 prepareStatement stmtstmt.set ... - 对于斑点不知道该怎么做,也不知道如何转换字段的字符串值

您可以使用

PreparedStatement.setString()ResultSet.getString(),如果您使用的是BLOB SUB_TYPE 1(又名BLOB SUB_TYPE TEXT),Firebird 驱动程序会为您将其转换为 blob 或从 blob 转换。确实需要确保连接字符集与 blob 字符集相同,否则可能会获得不正确的字符集转换。

其他选项是显式创建 Clob(使用 Connection.createClob() )并在语句上设置该 Clob,或者使用 setCharacterStream 方法。

为了将字符串转换为 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以获取预准备语句。这是一块。从他们的示例中,您似乎可以在PreparedStatement上调用setBlob

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();