关于oracle插入clob数据类型的问题

来源:互联网 发布:java周末班 编辑:程序博客网 时间:2024/05/16 07:02

                这几天做项目时遇到一个问题,要将大文本存入数据库,一开始本来是想用long类型,insert是行了,可是查询的时候却报错,原来long类型并不支持where语句查询

          于是想到用clob类型,一开始想的太简单了,一用才发现这个clob还不能直接这么插入,clob的插入大概分为三个步骤:1.插入empty_clob   2.获取clob  3.更新clob字段

               String sql = "insert into *** ( ***) values (empty_clob())";

                Connection con = null;

PreparedStatement pst=null;
Statement st=null;
ResultSet rs=null;
try {

/******************插入含 empty_clob的数据**************************/
con = DataAccess.getConnection();
con.setAutoCommit(false); //一定要使用事务非自动提交   不然下一步获取clob时会报提取顺序错误

pst = con.prepareStatement(sql);

                        .......pst参数注入

pst.executeUpdate();
con.commit();
/*********************获取clob**************************************/
st=con.createStatement();
sql="select content from QY_FLFG where id='"+dto.getId()+"' for update" ;  
   rs = st.executeQuery(sql);
   if (rs.next()) {
    CLOB clob = (CLOB)rs.getClob(1);  
    clob.putString(1, dto.getContent());
   /********************更新*************************************/
    sql="update QY_FLFG set content=? where id='"+dto.getId()+"'";
    pst = con.prepareStatement(sql);
    pst.setClob(1, clob);
    pst.executeUpdate();
    con.commit();
}

} catch (Exception e) {
// TODO: handle exception
System.err.println(e.getMessage());
id=null;//如果抛出错误
}
finally{
 try {
 if (rs!=null) {
 rs.close();
        }
 if (st!=null) {
 st.close();
        }
 if (pst!=null) {
 pst.close();
        }
con.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
0 0
原创粉丝点击