Oracle处理Clob类型数据入库(String入库)

从网上查找一堆参考,要么语焉不详,要么不可行。自己鼓捣了一堆可以正常入库了。请看最后:

insert into CP_V_INFO" +
                    "(ID, "+
                    "PROJECT_ID, "+
                    ……
                    "V_INFO, "+
                    ……
                    "VERSION)values(?,?,?,?,?,?,?,?,?,?," +
                    "?,?,EMPTY_CLOB(),?,?,?,?,?,?,?," +
                    "?,?,?,?,?,?,?,?,?,?," +
                    "?)";
        this.cdcDao.executeSQL(sql, v7Info.getId(),
                v7Info.getProjectId(),……
            );
//先插入该数据,在该字段用 EMPTY_CLOB() 插入。
//然后 for update
String update_sql = "select V_INFO from CP_V_INFO where ID=‘"+v7Info.getId()+"‘ for update";
            this.cdcDao.executeClobSQL(update_sql,"V_INFO",v7Info.getvInfoStr());
/**
     *
     * @Method: executeClobSQL
     * @Description: 更新Clob字段
     * @param update_sql
     * @param column 字段名称   data  该字段数据
     * @return
     * @throws SQLException
     * @throws Exception
     * @author liuz
     * @date 2016-3-28
     */
    public void executeClobSQL(String update_sql,String column,String data) throws SQLException, Exception {
        if(((MyJdbcTemplate)this.getJdbcTemplate()).isNEED_ENCODE()){
            update_sql = new String(update_sql.getBytes(((MyJdbcTemplate)this.getJdbcTemplate()).getAPP_ENCODE()),((MyJdbcTemplate)this.getJdbcTemplate()).getDB_ENCODE());
        }
        PreparedStatement p = null;
        ResultSet rs = null;
        try {
            Connection conn = this.getConnection();

            conn.setAutoCommit(false);
            p = paserSQL(conn, update_sql);
            rs = conn.createStatement().executeQuery(update_sql);
            if (rs.next()) {
                /* 取出此CLOB对象 */
                oracle.sql.CLOB clob = null;
                clob = (oracle.sql.CLOB) rs.getClob(column);
                /* 向CLOB对象中写入数据 */
                BufferedWriter out = new BufferedWriter(clob
                        .getCharacterOutputStream());
                    out.write(data);
                    out.flush();
                    out.close();
            }
            rs.close();
            conn.commit();
            conn.setAutoCommit(true);
        } finally {
            if (rs != null) {
                try {
                    rs.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }
            if (p != null) {
                try {
                    p.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }
        }
    }

  千辛万苦倒腾入库之后,同事说了一句“干嘛要改底层代码?”。啪啪啪一通悦耳的键盘声之后,改回原来的方式。该字段用 String 正常插入。结果是:正常入库了。、、、、、、、、、、泪奔!!!!

String sql = "insert into CP_V_INFO" +
                    "(ID, "+
                    ……
                    "V_INFO, "+
                    ……
                    "VERSION)values(?,?,?,?,?,?,?,?,?,?," +
                    "?,?,?,?,?,?,?,?,?,?," +
                    "?,?,?,?,?,?,?,?,?,?," +
                    "?)";
        this.cdcDao.executeSQL(sql, v7Info.getId(),
                ……
                v7Info.getvInfo(),//String类型
                ……
                v7Info.getVersion());
/* ******** end **********/
时间: 2024-11-03 21:07:23

Oracle处理Clob类型数据入库(String入库)的相关文章

Oracle中Clob类型处理解析:ORA-01461:仅可以插入LONG列的LONG值赋值

感谢原作者:破剑冰-Oracle中Clob类型处理解析 上一篇分析:ORA-01461: 仅能绑定要插入 LONG 列的 LONG 值 最近为Clob字段在插入数据时发现当字符的字节数(一个半角字符一个字节,一个全角字符两个字节)在2000-4000之间时报错(ORA-01461:仅可以插入LONG列的LONG值赋值).经过不断查找资料和自己的试验该问题终于得到解决,下边我将自己的心得给大家做一个分享. 准备 系统环境 xp+.net2.0+oracle9i 表结构(由于是测试,表结构随便建了一

Hibernate操作Clob类型数据

在POJO中字符串大对象可以声明成一个java.lang.String或java.sql.Clob类型. 当程序从数据库中加载Clob类型数据时,仅仅加载了一个Clob类型的数据的逻辑指针.我们需要通过使用Clob.getCaracterStream()方法得到Clob类型的数据输入流之后才能获取大对象数据. 看下面具体代码 package dao; import java.io.BufferedReader; import java.io.IOException; import java.io

Hibernate操作Clob类型数据是怎样弄的

在POJO中字符串大对象可以声明成一个java.lang.String或java.sql.Clob类型. 当程序从数据库中加载Clob类型数据时,仅仅加载了一个Clob类型的数据的逻辑指针.我们需要通过使用Clob.getCaracterStream()方法得到Clob类型的数据输入流之后才能获取大对象数据. 看下面具体代码 package dao; import java.io.BufferedReader; import java.io.IOException; import java.io

grails中如何存取Clob类型数据

首先说一下CLOB.CLOB是一种数据库中的数据类型,它将字符大对象存储为数据库表某一行中的一个列值,请注意,这里说的是字符大数据,驱动程序使用 SQL locator(CLOB) 实现 Clob 对象,这意味着 CLOB 对象包含一个指向 SQL CLOB 数据的逻辑指针而不是数据本身,也就是说,在表里面,Clob类型的存储的字段,它里面存的是一个指针而不是数据本身,这在统计时非常好用,因为你不需要知道数据是什么,只需要知道有多少个数据就够了. 这里也说明一下CLOB和BLOB的区别 1.CL

Oracle的CLOB大数据字段类型(转)

一.Oracle中的varchar2类型 我们在Oracle数据库存储的字符数据一般是用VARCHAR2.VARCHAR2既分PL/SQL Data Types中的变量类型,也分Oracle Database中的字段类型,不同场景的最大长度不同. 在Oracle Database中,VARCHAR2 字段类型,最大值为4000:PL/SQL中 VARCHAR2 变量类型,最大字节长度为32767. 当 VARCHAR2 容纳不下我们需要存储的信息时,就出来的Oracle的大数据类型LOB( La

Oracle中Clob类型处理解析 (转)

转:原文:http://blog.csdn.net/pojianbing/article/details/2789426 最近利用NHibernate映射类型为Clob字段在插入数据时发现当字符的字节数(一个半角字符一个字节,一个全角字符两个字节)在2000-4000之间时报错(ORA-01461:仅可以插入LONG列的LONG值赋值).经过不断查找资料和自己的试验该问题终于得到解决,下边我将自己的心得给大家做一个分享. 准备 系统环境 xp+.net2.0+oracle9i 表结构(由于是测试

使用NamedParameterJdbcTemplate向oracle插入枚举类型数据

使用NamedParameterJdbcTemplate向数据库插入含有枚举类型数据的对象时会出现的JAVA和SQL类型不匹配的情况,例如对于如下的JAVA类定义和对应的Oracle表定义: 1 public class MetaPhysicColumn { 2 3 public enum DataType{NUMBER, STRING, DATE, TIMESTAMP} 4 5 private String id; 6 private String name; 7 private String

Oracle关于date类型数据的总结

往Oracle数据库中插入日期型数据(to_date的用法) INSERT  INTO  FLOOR  VALUES  ( to_date ( '2007-12-20 18:31:34' , 'YYYY-MM-DD HH24:MI:SS' ) ) ; 查询显示:2007-12-20 18:31:34.0 ------------------- INSERT  INTO  FLOOR  VALUES  ( to_date ( '2007-12-14 14:10' , 'YYYY-MM-DD HH2

[python] python 读写Oracle clob类型数据的处理

clob字段是oracle专门用于存储超长字符串的字段类型,一般varchar2只能存4000个字符串,超过4000个就存不下去了. 如果直接使用 pandas.read_sql(sql, conn)会报错,那么如何将clob读取到python中呢? 1.read方法 import cx_Oracle conn = cx_Oracle.connect("user/[email protected]/db") cur = conn.cursor() # col 是clob字段 cur.e