JDBC中将blob插入oracle的最佳方法是什么?

问题描述 投票:0回答:1

我有一个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的方法有很多种:

  1. 使用标准的jdbc Blob对象
Blob blob = connection.createBlob();
blob.setBytes(1, byteData);
ps.setBlob(1, blob);
ps.execute();
blob.free();
  1. 使用oracle的特定对象
Blob blob = BLOB.createTemporary(connection, false, BLOB.DURATION_SESSION);
blob.setBytes(1, byteData);
ps.setBlob(1, blob);
ps.execute();
blob.free();
  1. 使用oracle的数据库函数hextoraw
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();

问题

以上方式有哪些优点/缺点?还有其他更好的方法吗?

oracle jdbc blob
1个回答
1
投票

您的第一个和第二个示例似乎与我完全相同:

blob.setBytes(1, byteData);
ps.setBlob(1, blob);
ps.execute();
blob.free();

我可能会在你的第三个例子中选择这种方法。原因是第三个例子涉及调用Oracle函数hextoraw。这可能会在插入过程中产生额外的开销,因此可能无法像选项1或2那样执行。

© www.soinside.com 2019 - 2024. All rights reserved.