【问题标题】:creating a random blob in jdbc and writing it to oracle在 jdbc 中创建一个随机 blob 并将其写入 oracle
【发布时间】:2011-05-19 08:12:22
【问题描述】:

我想在 java [in memory] ​​中创建许多 blob 并将其写入 Oracle 表。

我想要的是 blob [其中的位] 是随机的或 sudo 随机的,以便 oracle 在将 blob 存储到表时无法进行大量预优化。

有点像

for(1..1000000)
{
blob = createRandomBlob(sizeOfBlob);
sqlText ="INSERT INTO test_blob (id, blob) VALUES(i, blob)";
stmt.executeUpdate(sqlText);
}

有人能指出我可以使用哪些 JAVA API 来创建此类 blob [在内存中而不是在磁盘上] 并将其写入 db 吗?

谢谢

【问题讨论】:

  • 这个问题是Oracle驱动必须支持它。我坚持使用 Oracle 10g 驱动程序,它们甚至似乎不支持 Java 6 的连接 createBlob()。我不知道这是否在 11g 驱动程序中得到解决。
  • 我刚刚在 EJB 中使用 Oracle 10.2 + 11g 驱动程序对其进行了测试,但没有成功。它抱怨 connection.createBlob();

标签: sql jdbc blob oracle11g


【解决方案1】:

我认为这应该可以解决问题

  byte[] data = new byte[10000];
    fRandom.nextBytes(data);
    try
    {
      SerialBlob fSerialBlob = new SerialBlob(data);
    } catch (SerialException e)
    {
      // TODO Auto-generated catch block
      e.printStackTrace();
    } catch (SQLException e)
    {
      // TODO Auto-generated catch block
      e.printStackTrace();
    }

不知道是否有更快/更有效的方法。

【讨论】:

    【解决方案2】:

    我只能回答“将其存储在DB部分”,不确定“创建随机blob数组”

    byte[] someBlob = createBlobBytes(); PreparedStatement stmt = connection.prepareStatement("INSERT INTO test_blob (id, blob) VALUES(?, ?)"; ByteArrayInputStream in = new ByteArrayInputStream(someBlob); stmt.setInt(1, id); stmt.setBinaryStream(2, in, someBlob.length); stmt.executeUpdate();

    这应该适用于 10.x 驱动程序

    【讨论】:

      猜你喜欢
      • 2011-12-17
      • 1970-01-01
      • 1970-01-01
      • 2019-06-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多