什么是从Oracle数据库使用SQL插入和检索BLOB数据的方法?(What are the way

2019-07-31 07:50发布

我试图用SQL开发插入BLOB数据。 但我无法找到它实际上是用来插入BLOB数据的INSERT语句。

除此之外,数据库的速度实在是太慢了。 对于小文件,它执行罚款。 但是,当我试图导入50 MB avi文件到BLOB,花了3-4分钟和它仍然没有完成。 当我试图BLOB数据导出到文件,导出过程也是缓慢的。 我使用Oracle 10g Express Edition的。 如果数据库速度比较慢,甚至比文件系统的速度,那么为什么数据库用于存储BLOB数据? 是否有任何其他的方式来优化性能?

Answer 1:

首先,你应该在数据库中存储BLOB是(有时有点,经常显著)慢,但definitly不是不是将它们存储在文件系统速度更快。 将它们存储在一个数据库的理由没有中心关于性能,而是如:

  • 在群集或负载平衡的情形的(共享的)文件系统的不可用
  • 易于备份:单进程,AOT 2个处理时使用的文件和数据库
  • 交易安全:BLOB是要么有,完整或没有,但不是在一个半生不熟的阶段
  • 别人我不认为现在。

一般的经验法则是,如果没有这些关心你的,你应该将文件存储为...文件。 存储在数据库中的元数据和路径是恕我直言好,常见的做法。

关于Oracle调优:有书撰写有关。 我怀疑它们加起来远远超过了死树,平装本形式一吨。 你可能会首先看在甲骨文进程的内存消耗 - 经验法则:如果是不到演出,并使用BLOB的,你有麻烦了。 阅读上的不同的内存池,以及如何增加他们。 快车版有些限制可能适用。



Answer 2:

这不是你可以与你的SQL开发人员使用的代码,它是为了将一个blob使用一个StringBuffer的Java代码。 希望这将是有用的:

private void addBlob(oracle.jdbc.OracleConnection oracleConn, StringBuffer content) throws Exception
{    
      PreparedStatement st = null;
      try {                
            oracle.sql.BLOB blob = oracle.sql.BLOB.createTemporary(oracleConn, true, oracle.sql.BLOB.DURATION_SESSION);

            blob.setBytes(1, content.toString().getBytes("UTF-8"));

            st = oracleConn.prepareStatement("INSERT INTO MYTABLE (id, content) VALUES (MYTABLE_S.NEXTVAL, ?)");
            st.setBlob(1, blob);
            st.execute();
            st.close();
        }
        catch (Exception e) {
            utils.writeLog("Blob insertion Failed", e, utils.ERR);
            throw e;
        }        
        finally{
            st.close();
        }
  }


文章来源: What are the ways to insert & retrieve BLOB data from Oracle database using SQL?