您的位置:首页 > 编程语言 > Java开发

JAVA读取、写入、更新CLOB字段

2016-07-11 18:22 429 查看
Java代码  


/* 

--建表语句如下: 

create table t_clob( 

        id varchar2(32) primary key, 

        clobfield CLOB 

        ); 

 */  

  

/** 

 * 读取CLOB字段的代码示例 

 *  

 * 作者:wallimn<br/> 

 * 时间:2015-1-16<br/> 

 * 联系:wallimn@sohu.com<br/> 

 */  

public void readClob() {  

    //自定义的数据库连接管理类   

    Connection conn = DbManager.getInstance().getConnection();  

    try {  

        PreparedStatement stat = conn  

                .prepareStatement("select clobfield from t_clob where id='1'");  

        ResultSet rs = stat.executeQuery();  

        if (rs.next()) {  

            oracle.sql.CLOB clob = (oracle.sql.CLOB) rs  

                    .getClob("clobfield");  

            String value = clob.getSubString(1, (int) clob.length());  

            System.out.println("CLOB字段的值:" + value);  

        }  

        conn.commit();  

    } catch (SQLException e) {  

        e.printStackTrace();  

    }  

  

    DbManager.getInstance().closeConnection(conn);  

}  

  

/** 

 * 写入、更新CLOB字段的代码示例 

 *  

 * 作者:wallimn<br/> 

 * 时间:2015-1-16<br/> 

 * 联系:wallimn@sohu.com<br/> 

 */  

public void writeClob() {  

    //自定义的数据库连接管理类   

    Connection conn = DbManager.getInstance().getConnection();  

    try {  

        conn.setAutoCommit(false);  

        // 1.这种方法写入CLOB字段可以。  

        PreparedStatement stat = conn  

                .prepareStatement("insert into t_clob (id,clobfield) values(sys_guid(),?)");  

        String clobContent = "This is a very very long string";  

        StringReader reader = new StringReader(clobContent);  

        stat.setCharacterStream(1, reader, clobContent.length());  

        stat.executeUpdate();  

  

        // 2.使用类似的方法进行更新CLOB字段,则不能成功   

        // stat.close();  

        // stat =null;  

        // stat =  

        // conn.prepareStatement("update t_clob set clobfield=? where id=1");  

        // stat.setCharacterStream(1, reader, clobContent.length());  

        // stat.executeUpdate();  

  

        // 3.需要使用for update方法来进行更新,  

        // 但是,特别需要注意,如果原来CLOB字段有值,需要使用empty_clob()将其清空。  

        // 如果原来是null,也不能更新,必须是empty_clob()返回的结果。  

        stat = conn  

                .prepareStatement("select clobfield from t_clob where id='1' for update");  

        ResultSet rs = stat.executeQuery();  

        if (rs.next()) {  

            oracle.sql.CLOB clob = (oracle.sql.CLOB) rs  

                    .getClob("clobfield");  

            Writer outStream = clob.getCharacterOutputStream();  

            char[] c = clobContent.toCharArray();  

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

            outStream.flush();  

            outStream.close();  

        }  

        conn.commit();  

    } catch (SQLException | IOException e) {  

        // TODO Auto-generated catch block  

        e.printStackTrace();  

    }  

  

    DbManager.getInstance().closeConnection(conn);  

  

}  

原文转载 http://wallimn.iteye.com/blog/2176537
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: