我有一个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();
上述方式的优点/缺点是什么? 还有其他更好的方法吗?
答案 0 :(得分:0)
您的第一个和第二个示例似乎与我相同:
blob.setBytes(1, byteData);
ps.setBlob(1, blob);
ps.execute();
blob.free();
在您的第三个示例中,我可能会选择此方法。这样做的原因是第三个示例涉及调用Oracle函数hextoraw
。这可能会在插入过程中产生额外的开销,因此可能不如选项1或2那样好。
答案 1 :(得分:0)
我所知的最好方式:
ps.setBytes( 1, byteData );
HTH Loïc