java中怎么处理oracle中的COLB字段?存储和读取

解决方案 »

  1.   

    一、 CLOB对象的存取 
    1、往数据库中插入一个新的CLOB对象 
    public static void clobInsert(String infile) throws Exception 

    /* 设定不自动提交 */ 
    boolean defaultCommit = conn.getAutoCommit(); 
    conn.setAutoCommit(false); 
    try { 
    /* 插入一个空的CLOB对象 */ 
    stmt.executeUpdate("INSERT INTO TEST_CLOB VALUES (’111’, EMPTY_CLOB())"); 
    /* 查询此CLOB对象并锁定 */ 
    ResultSet rs = stmt.executeQuery("SELECT CLOBCOL FROM TEST_CLOB WHERE ID=’111’ FOR UPDATE"); 
    while (rs.next()) { 
    /* 取出此CLOB对象 */ 
    oracle.sql.CLOB clob = (oracle.sql.CLOB)rs.getClob("CLOBCOL"); 
    /* 向CLOB对象中写入数据 */ 
    BufferedWriter out = new BufferedWriter(clob.getCharacterOutputStream()); 
    BufferedReader in = new BufferedReader(new FileReader(infile)); 
    int c; 
    while ((c=in.read())!=-1) { 
    out.write(c); 

    in.close(); 
    out.close(); 

    /* 正式提交 */ 
    conn.commit(); 
    } catch (Exception ex) { 
    /* 出错回滚 */ 
    conn.rollback(); 
    throw ex; 

    /* 恢复原提交状态 */ 
    conn.setAutoCommit(defaultCommit); 

    2、修改CLOB对象(是在原CLOB对象基础上进行覆盖式的修改) 
    public static void clobModify(String infile) throws Exception 

    /* 设定不自动提交 */ 
    boolean defaultCommit = conn.getAutoCommit(); 
    conn.setAutoCommit(false); 
    try { 
    /* 查询CLOB对象并锁定 */ 
    ResultSet rs = stmt.executeQuery("SELECT CLOBCOL FROM TEST_CLOB WHERE ID=’111’ FOR UPDATE"); 
    while (rs.next()) { 
    /* 获取此CLOB对象 */ 
    oracle.sql.CLOB clob = (oracle.sql.CLOB)rs.getClob("CLOBCOL"); 
    /* 进行覆盖式修改 */ 
    BufferedWriter out = new BufferedWriter(clob.getCharacterOutputStream()); 
    BufferedReader in = new BufferedReader(new FileReader(infile)); 
    int c; 
    while ((c=in.read())!=-1) { 
    out.write(c); 

    in.close(); 
    out.close(); 

    /* 正式提交 */ 
    conn.commit(); 
    } catch (Exception ex) { 
    /* 出错回滚 */ 
    conn.rollback(); 
    throw ex; 

    /* 恢复原提交状态 */ 
    conn.setAutoCommit(defaultCommit); 

     3、替换CLOB对象(将原CLOB对象清除,换成一个全新的CLOB对象) 
    public static void clobReplace(String infile) throws Exception 

    /* 设定不自动提交 */ 
    boolean defaultCommit = conn.getAutoCommit(); 
    conn.setAutoCommit(false); 
    try { 
    /* 清空原CLOB对象 */ 
    stmt.executeUpdate("UPDATE TEST_CLOB SET CLOBCOL=EMPTY_CLOB() WHERE ID=’111’"); 
    /* 查询CLOB对象并锁定 */ 
    ResultSet rs = stmt.executeQuery("SELECT CLOBCOL FROM TEST_CLOB WHERE ID=’111’ FOR UPDATE"); 
    while (rs.next()) { 
    /* 获取此CLOB对象 */ 
    oracle.sql.CLOB clob = (oracle.sql.CLOB)rs.getClob("CLOBCOL"); 
    /* 更新数据 */ 
    BufferedWriter out = new BufferedWriter(clob.getCharacterOutputStream()); 
    BufferedReader in = new BufferedReader(new FileReader(infile)); 
    int c; 
    while ((c=in.read())!=-1) { 
    out.write(c); 

    in.close(); 
    out.close(); 

    /* 正式提交 */ 
    conn.commit(); 
    } catch (Exception ex) { 
    /* 出错回滚 */ 
    conn.rollback(); 
    throw ex; 

    /* 恢复原提交状态 */ 
    conn.setAutoCommit(defaultCommit); 

    4、CLOB对象读取 
    public static void clobRead(String outfile) throws Exception 

    /* 设定不自动提交 */ 
    boolean defaultCommit = conn.getAutoCommit(); 
    conn.setAutoCommit(false); 
    try { 
    /* 查询CLOB对象 */ 
    ResultSet rs = stmt.executeQuery("SELECT * FROM TEST_CLOB WHERE ID=’111’"); 
    while (rs.next()) { 
    /* 获取CLOB对象 */ 
    oracle.sql.CLOB clob = (oracle.sql.CLOB)rs.getClob("CLOBCOL"); 
    /* 以字符形式输出 */ 
    BufferedReader in = new BufferedReader(clob.getCharacterStream()); 
    BufferedWriter out = new BufferedWriter(new FileWriter(outfile)); 
    int c; 
    while ((c=in.read())!=-1) { 
    out.write(c); 

    out.close(); 
    in.close(); 

    } catch (Exception ex) { 
    conn.rollback(); 
    throw ex; 

    /* 恢复原提交状态 */ 
    conn.setAutoCommit(defaultCommit); 

    自己顶  呵呵