• 企业400电话
  • 微网小程序
  • AI电话机器人
  • 电商代运营
  • 全 部 栏 目

    企业400电话 网络优化推广 AI电话机器人 呼叫中心 网站建设 商标✡知产 微网小程序 电商运营 彩铃•短信 增值拓展业务
    oracle数据库中如何处理clob字段方法介绍
    在知识库的建立的时候,用普通VARCHAR2存放文章是显然不够的,只有区区4000的字节,放不了多少字,
    而CLOB数据类型,则能最多存放8G的数据。但是这个字段处理起来有比较多的特殊性,记录一下。
    插入:
    直接写在SQL里面是不行的,一来SQL脚本有字符数限制,而来文章内容包含许多特殊字符,如换行,引号,
    之类的东西,很麻烦。网上流行通用做法是先插入一个空CLOB字段,用empty_clob()方法来创建空字段,如:
    复制代码 代码如下:

    INSERT INTO T_TOPIC(TOPIC_ID,TOPIC_CONTENT) VALUES(‘0000001',empty_clob());

    然后再用SELECT TOPIC_CONTENT FROM T_TOPIC WHERE TOPIC_ID='0000001'FOR UPDATE的查询语句,
    来构造一个更新的STATEMENT,在获取到ResultSet之后,对CLOB字段进行更新。
    复制代码 代码如下:

    ResultSet rs = pstm.executeQuery();
    if(rs.next()){
    oracle.sql.CLOB lob =(CLOB)rs.getClob(1);
    try {
    Writer os = lob.getCharacterOutputStream();
    os.write(dr.getField("FLD_CONTENT").asString());
    os.flush();
    } catch (IOException e) {
    e.printStackTrace();
    }
    }

    这个插入和更新操作要放在事务中,即获取到Connection后要设置setAutoCommit(false);
    更新:
    更新的时候也是采用SEELCT … FOR UPDATE方式
    也要设置事务

    读取:
    复制代码 代码如下:

    CLOB clob = (CLOB)rs.getClob("FLD_CONTENT");
    Reader reader = clob.getCharacterStream();
    StringBuffer sb=new StringBuffer();
    char[] cb = new char[1024];
    try {
    for(int len = reader.read(cb);len>0;len= reader.read(cb)){
    sb.append(cb,0,len);
    }
    } catch (IOException e) {
    throw new SQLException("读取文章内容失败.",e);
    }

    查询的特殊性:
    有CLOB字段的数据表,在SQL语句中不能使用DISTINCT关键字进行筛选,即便关键字不用在CLOB字段名前,
    实际上DISTINCT关键字都是对于SQL中所有字段有效。而CLOB字段是不能进行如同LIKE类似的匹配的,所以,
    不能进行去重复操作。
    两种解决办法:
    1、在SQL中调用方法转成VARCHAR2字段后,再DISTINCT,这种方式的局限显而易见。
    2、改变SQL脚本的书写方式,先查出没有CLOB字段的集合,然后在在外层用EXISTS关键字或IN关键字进行筛选。
    复制代码 代码如下:

    //String sqlsel2 = "select jsonbody from db_ps_listcatalog where" +
    // " listtype ='sh11' for update";
    // String col="jsonbody";

    public boolean updateClob(String sql,String col,String buf){
    boolean flag=false;
    Statement stem=null;
    Connection conn=null;
    ResultSet rs=null;
    Writer wr = null;
    try{
    conn= dp.getConnection();
    conn.setAutoCommit(false);
    stem=conn.createStatement();
    rs = stem.executeQuery(sql);
    if (rs.next()) {
    CLOB clob = (CLOB) rs.getClob(col);
    java.lang.reflect.Method methodToInvoke = clob.getClass().getMethod(
    "getCharacterOutputStream", (Class[]) null);
    wr = (Writer) methodToInvoke.invoke(clob, (Object[]) null);
    BufferedWriter bw = new BufferedWriter(wr);
    bw.write(buf);
    bw.flush();
    bw.close();
    conn.commit();
    conn.close();
    }
    flag=true;
    } catch (Exception ex){
    try {
    conn.rollback();
    } catch (SQLException e) {
    e.printStackTrace();
    }
    }
    return flag;
    }
    您可能感兴趣的文章:
    • oracle删除表字段和oracle表增加字段
    • oracle使用sql语句增加字段示例(sql删除字段语句)
    • Oracle 插入超4000字节的CLOB字段的处理方法
    • oracle关键字作为字段名使用方法
    • 深入浅析mybatis oracle BLOB类型字段保存与读取
    • Oracle中判断字段是否为数字
    • 简单三步轻松实现ORACLE字段自增
    • Oracle 查询表信息获取表字段及字段注释
    • java读写oracle的blob字段示例
    • ORACLE中段的HEADER_BLOCK示例详析
    上一篇:Oracle定义联合数组及使用技巧
    下一篇:将oracle的create语句更改为alter语句使用
  • 相关文章
  • 

    © 2016-2020 巨人网络通讯 版权所有

    《增值电信业务经营许可证》 苏ICP备15040257号-8

    oracle数据库中如何处理clob字段方法介绍 oracle,数据库,中,如何,处理,