首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用SQL从Oracle数据库插入和检索BLOB数据的方法有哪些?

使用SQL从Oracle数据库插入和检索BLOB数据的方法有哪些?
EN

Stack Overflow用户
提问于 2012-09-01 01:07:24
回答 2查看 22.6K关注 0票数 6

我尝试过用SQL developer插入BLOB数据。但是我找不到实际用于插入BLOB数据的insert语句。

除此之外,数据库速度真的很慢。对于小文件,它可以很好地执行。但当我尝试导入50mb的avi文件到BLOB,它花了3-4分钟&仍然没有完成。当我尝试将BLOB数据导出到文件时,导出过程也很慢。我使用的是Oracle 10g Express Edition。如果数据库的速度甚至低于文件系统的速度,那么为什么要使用数据库来存储BLOB数据呢?有没有其他优化性能的方法?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-09-01 01:19:14

首先,您应该预期在数据库中存储BLOB的速度会比在文件系统中存储BLOB慢(有时会慢一点,通常会慢很多),但肯定不会快。将它们存储在数据库中的原因并不以性能为中心,而是例如:

群集或负载平衡方案中(共享)文件系统的

  • Unavailability
  • 备份的简易性:单进程,a.o.t.当文件和数据库是used
  • Transaction安全时的2个过程: BLOB要么在那里,要么完整,要么不完整,但不是处于半生不熟的阶段
  • 其他我现在想不到的阶段。

一般的经验法则是,如果这些都与您无关,您应该将您的文件存储为...文件。将元数据和路径名存储在数据库中是一种良好且常见的做法。

关于Oracle调优:有一些关于这方面的书籍。我怀疑它们在死树平装格式中的总数超过了一吨。您可能首先看一下Oracle进程的内存消耗--经验法则:如果它不到一个千兆,而您使用的是BLOB,那么您就有麻烦了。阅读不同的内存池以及如何增加内存池。速成版的一些限制可能适用。

票数 5
EN

Stack Overflow用户

发布于 2012-09-01 02:40:54

这不是您的sql开发人员可以使用的代码,而是使用StringBuffer插入blob的Java代码。希望这将是有用的:

代码语言:javascript
复制
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();
        }
  }
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12219734

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档