`

Oracle 超长字段的处理

 
阅读更多

ORACLE中的大对象:  

LONG: 可变长的字符串数据,最长2G,LONG具有VARCHAR2列的特性,可以存储长文本一个表中最多一个LONG列 

LONG RAW: 可变长二进制数据,最长2G 

CLOB:  字符大对象Clob 用来存储单字节的字符数据 

NCLOB: 用来存储多字节的字符数据 

BLOB: 用于存储二进制数据 

BFILE: 存储在文件中的二进制数据,这个文件中的数据只能被只读访。但该文件不包含在数据库内。bfile字段实际的文件存储在文件系统中,字段中存储的是文件定位指针.bfile对oracle来说是只读的,也不参与事务性控制和数据恢复.    

CLOB,NCLOB,BLOB都是内部的LOB(Large Object)类型,最长4G,没有LONG只能有一列的限制。

 

要保存图片、文本文件、Word文件各自最好用哪种数据类型?

--BLOB最好,LONG RAW也不错,但Long是oracle将要废弃的类型,因此建议用BLOB。

对CLOB与BLOB对象的操作 

    1.  查询(GET) 

 

     查询CLOB     

    //获得数据库连接   

    Connection con = ConnectionFactory.getConnection();   

    con.setAutoCommit(false);   

    Statement st = con.createStatement();   

    //不需要“for update”   

    ResultSet rs = st.executeQuery("select CLOBATTR from TESTCLOB where ID=1");   

    if (rs.next())   

    {   

        java.sql.Clob clob = rs.getClob("CLOBATTR");   

        Reader inStream = clob.getCharacterStream();   

        char[] c = new char[(int) clob.length()];   

        inStream.read(c);   

        //data是读出并需要返回的数据,类型是String   

        data = new String(c);   

        inStream.close();   

    }   

    inStream.close();   

    con.commit();   

    con.close(); 

 

    查询BLOB 

    Connection con = ConnectionFactory.getConnection();  

    con.setAutoCommit(false);   

    Statement st = con.createStatement();   

    //不需要“for update”   

    ResultSet rs = st.executeQuery("select BLOBATTR from TESTBLOB where ID=1");   

    if (rs.next())   

    {   

        java.sql.Blob blob = rs.getBlob("BLOBATTR");   

        InputStream inStream = blob.getBinaryStream();   

        //data是读出并需要返回的数据,类型是byte[]   

        data = new byte[input.available()];   

        inStream.read(data);   

        inStream.close();   

    }   

    inStream.close();   

    con.commit();   

    con.close();   

 

    2.  插入(INSERT)

 

     插入CLOB

 

    //获得数据库连接   

    Connection con = ConnectionFactory.getConnection();   

    con.setAutoCommit(false);   

    Statement st = con.createStatement();   

    //插入一个空对象empty_clob()   

    st.executeUpdate("insert into TESTCLOB (ID, NAME, CLOBATTR) values (1, "thename", empty_clob())");   

    //锁定数据行进行更新,注意“for update”语句   

    ResultSet rs = st.executeQuery("select CLOBATTR from TESTCLOB where ID=1 for update");   

    if (rs.next())   

    {   

        //得到java.sql.Clob对象后强制转换为oracle.sql.CLOB   

        oracle.sql.CLOB clob = (oracle.sql.CLOB) rs.getClob("CLOBATTR");   

        Writer outStream = clob.getCharacterOutputStream();   

        //data是传入的字符串,定义:String data   

        char[] c = data.toCharArray();   

        outStream.write(c, 0, c.length);   

    }   

    outStream.flush();   

    outStream.close();   

    con.commit();   

    con.close();        

    插入BLOB  

    //获得数据库连接   

    Connection con = ConnectionFactory.getConnection();   

    con.setAutoCommit(false);   

    Statement st = con.createStatement();   

    //插入一个空对象empty_blob()   

    st.executeUpdate("insert into TESTBLOB (ID, NAME, BLOBATTR) values (1, "thename", empty_blob())");   

    //锁定数据行进行更新,注意“for update”语句   

    ResultSet rs = st.executeQuery("select BLOBATTR from TESTBLOB where ID=1 for update");   

    if (rs.next())   

    {   

        //得到java.sql.Blob对象后强制转换为oracle.sql.BLOB   

        oracle.sql.BLOB blob = (oracle.sql.BLOB) rs.getBlob("BLOBATTR");   

        OutputStream outStream = blob.getBinaryOutputStream();   

        //data是传入的byte数组,定义:byte[] data   

        outStream.write(data, 0, data.length);   

    }   

    outStream.flush();   

    outStream.close();   

    con.commit();   

    con.close();  

 

转自:http://www.blogjava.net/Simmons/articles/333302.html


分享到:
评论

相关推荐

    oracle blob 字段 读写 delphi

    Oracle数据库中的BLOB(Binary Large Object)字段是用来存储大量二进制数据的,例如图片、文档或音频文件。在Delphi编程环境中,处理这类数据时需要掌握特定的API调用和方法。本篇文章将深入探讨如何在Delphi中对...

    详解Oracle修改字段类型方法总结

    例如,处理`CLOB`字段的查询性能问题、PHP处理`CLOB`的实例、插入和更新`CLOB`数据时的字符串长度限制,以及对超长数据的存储等,这些都是Oracle数据库管理中常见的问题,需要针对性地学习和掌握相应的解决方案。...

    Oracle接收长度大于4000的字符串

    在Oracle数据库中,默认情况下,`VARCHAR2`类型字段的最大长度为4000个字符。当需要处理更长的字符串时(例如,超过4000个字符),可以采用多种方法来解决这一问题。本文将详细介绍如何在.NET环境中处理和传递长度...

    oracle 实际值超过数据库某个字段指定长度报错解决

    在Oracle数据库中,当尝试插入的数据实际值长度超过了所对应字段定义的最大长度时,系统会抛出`ORA-01438`错误。这个错误表明数据精度超过了字段的允许范围,导致插入操作无法完成。这通常发生在字段类型如`NUMBER`...

    CLOB 字段类型报错 ORA-01704: 文字字符串过长的解决

    在Oracle数据库中,CLOB...理解Oracle对不同类型字段的长度限制以及如何有效地处理这些限制是数据库管理员和开发人员必备的技能。通过上述策略,你可以成功地处理超过4000字符限制的问题,从而避免“ORA-01704”错误。

    Oracle 插入超4000字节的CLOB字段的处理方法

    在Oracle数据库中,由于设计上的限制,当需要插入超过4000字节的...总的来说,处理大型数据字段时,无论是Oracle还是SQL Server,都需要根据具体的需求和环境选择合适的插入策略,以确保数据的完整性和系统的稳定性。

    Excel文件导入到Oracle数据库

    在导入过程中,要注意监控进度和错误,及时处理可能出现的问题,如数据类型不匹配、超长字段、空值处理等。 6. **验证和后处理**:导入完成后,通过查询Oracle表来验证数据是否完整无误。如果有问题,可能需要回滚...

    oracle 存储过程中某入参是逗号分隔,并且参数要使用在in过滤语句中

    oracle存储过程中入参是逗号分隔,并且参数要使用在in过滤语句中查询数据。处理的方法与实现

    odi10g大字段知识模块

    Oracle Data Integrator (ODI) 是一款强大的企业级数据集成工具,主要用于ETL(Extract, Transform, Load)过程。...在ODI11g及后续版本中,这些概念和方法依然适用,体现了ODI在大字段处理方面的兼容性和演进性。

    解析Excle数据到Oracle数据库

    - **错误处理**:在导入过程中可能会遇到错误,如数据不一致、超长字段等,需要设计合理的错误处理策略。 学习资料方面,可以从以下几个角度入手: - **Oracle官方文档**:Oracle的官方文档提供了详细的SQL ...

    mysql和Oracle命令的区别

    5. 日期字段处理: MySQL 中日期字段分为 `DATE` 和 `TIME`,而 Oracle 的 `DATE` 字段包含日期和时间信息。在 Oracle 中,可以使用 `SYSDATE` 获取当前系统日期,精确到秒。日期转换函数 `TO_DATE()` 和 `TO_CHAR...

    Mysql Oracle 数据库开发设计及使用规范

    - 超长表名处理方法:从前往后截取每个单词的前三个字母,保留最后一个单词完整,若仍然超长,则保留前面单词的首字母直接与最后一个单词相连。 - 临时表以`TMP`开头,命名格式为`TMP_名字拼音首字母_模块/用途名称`...

    PL/SQL中查询Oracle大数(17位以上)时显示科学计数法的解决方法

    在进行数据库操作时,我们经常会遇到处理大数据的情况。特别是在Oracle数据库中,当涉及到17位以上的数字时,可能会出现一个问题:这些大数在查询结果中会以科学计数法的形式显示,而不是常规的数字格式。这不仅会...

    sqlldr报超出字符长度错误

    在SQL*Loader执行过程中,如果某一字段的实际值长度超过了目标表该列的长度,就会触发此错误。 #### 解决方案 1. **调整目标表列的长度:** 最直接的方法是增加目标表中对应列的长度,使其能够容纳更大的数据量。...

    ORA-01480STR 绑定值的结尾 Null字符缺失 的问题原因及解决办法

    这表明问题可能不在字段长度,而在于Oracle内部处理的缓冲区大小。 Oracle默认的内部缓冲区大小通常是2000 bytes。当尝试插入或更新的数据超过这个限制时,就会出现ORA-01480错误。因此,通过分批更新数据,每次不...

    oracle和sql数据类型

    它们决定了数据的结构、大小以及如何进行处理。以下是两种数据库系统中主要数据类型的详细比较: **Oracle 数据类型** 1. **Char**: Char 是一种固定长度的字符串类型,最大长度为 2000 bytes。无论实际输入的数据...

    关于Oracle中不规则数据存储问题的解决方法.pdf

    处理不规则数据,即非标准格式或大型对象(LOB)的数据,是Oracle数据库管理中的一个重要方面。本文将详细阐述Oracle中如何存储不规则数据,以及针对不同类型的大数据对象采取的策略。 首先,Oracle提供了多种数据...

    向Oracle数据库的CLOB属性插入数据报字符串过长错误

    网上说用流来处理,没有这么做。这像是一个Bug,只要把插入的数据,默认扩充到2000以上就ok了。 下面是这段代码: if((temp.length()>=1000)&&(temp.length()<=2000)){ temp=StringUtils.rightPad(temp, 2008); }...

    oracle 数据按主键删除慢问题的解决方法

    一开始一直以为是hibernate的内部处理上有关联操作导致的删除和更新数据缓慢。所以将原先使用hibernate的saveOrupdate方法,改查jdbc的 sql语句来处理update和delete数据操作。但是依然没效果!!! 怀疑数据库出...

    oracle常用数据类型说明

    7. LONG:LONG类型用于存储超长字符串,最大长度可达2GB,适合大型文本或文档的存储,但不建议频繁修改,因为可能导致性能下降。 8. RAW:RAW是固定长度的二进制数据类型,最大长度2000字节,用于存储非文本数据,...

Global site tag (gtag.js) - Google Analytics