我有一个java代码,应该将字节数组插入到Oracle数据库的blob列中。功能签名是:
void loadBlob(Connection connection, byte[] byteData, PreparedStatement ps) {...}
字节数组作为参数传递(无需从任何源/流中读取它)。
ps是使用以下方法创建的:
connection.prepareStatement("insert into mytable values(?)")
mytable脚本是:create table mytable (myblob blob)
Blob blob = connection.createBlob();
blob.setBytes(1, byteData);
ps.setBlob(1, blob);
ps.execute();
blob.free();
Blob blob = BLOB.createTemporary(connection, false, BLOB.DURATION_SESSION);
blob.setBytes(1, byteData);
ps.setBlob(1, blob);
ps.execute();
blob.free();
PreparedStatement ps2 = connection.prepareStatement("insert into mytable values (hextoraw(?))")
//convert the byte array to hexadecimal digits - the implementation is skipped to avoid de-focus from the main issue
String hexaDigits = convertByteArrayToHexaDigits(byteData);
ps2.setString(1, hexaDigits);
ps2.execute();
以上方式有哪些优点/缺点?还有其他更好的方法吗?
您的第一个和第二个示例似乎与我完全相同:
blob.setBytes(1, byteData);
ps.setBlob(1, blob);
ps.execute();
blob.free();
我可能会在你的第三个例子中选择这种方法。原因是第三个例子涉及调用Oracle函数hextoraw
。这可能会在插入过程中产生额外的开销,因此可能无法像选项1或2那样执行。