我正在构建一个项目,但遇到了在数据库 Firebird 中创建的 Blob 字段的问题。这个字段是指一个字段观察,我不想限制用户输入的文本数量。
但是我有一个问题,不知道如何保存和阅读该字段。
我正在使用 JDBC 使用 insert prepareStatement stmt stmt.set ... - 对于 blob 不知道该怎么做,也不知道如何转换字段的字符串值
您可以使用PreparedStatement.setString()
and如果您使用(aka ) ResultSet.getString()
,Firebird 驱动程序将为您将其转换为 blob 或从 blob 转换。您确实需要确保您的连接字符集与 blob 字符集相同,否则您可能会得到不正确的字符集转换。BLOB SUB_TYPE 1
BLOB SUB_TYPE TEXT
其他选项是显式创建一个 Clob(使用Connection.createClob()
)并将其设置在语句上,或者使用该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
以获取准备好的语句。这是一块。从他们的示例看来,您可以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();