Oracle处理CLOB超过4000入库问题 (2)
来源:互联网 发布:财务报账系统 php 编辑:程序博客网 时间:2024/06/07 23:38
接上一篇转载的Oracle处理CLOB超过4000入库问题,同事用我的写的代码,说仍出现问题,后面写了另一种方法,在这里做一个记录,以便以后学习。
先把需求简要提出来:
public String toInsertSql(){String sql="insert into TB_NEWS ("+"title,"+"publictime,"+"source,"+"abstract,"+"content,"+"url,"+"infodate,"+"author,"+"hits,"+"expand,"+"createtime,"+"modifytime"+") "+"values (";if(this.getTitle() == null){sql += "'',";}else{sql += "'"+this.getTitle().replaceAll("'", "")+"'"+",";}if(this.getPublictime() == null){sql += "'',";}else{sql += "'"+this.getPublictime().replaceAll("'", "")+"'"+",";}if(this.getSource() == null){sql += "'',";}else{sql += "'"+this.getSource().replaceAll("'", "")+"'"+",";}if(this.getAbstracts() == null){sql += "'',";}else{sql += "'"+this.getAbstracts().replaceAll("'", "")+"'"+",";}if(this.getContent() == null){sql += "'',";}else{//sql += "'"+this.getContent().replaceAll("'", "")+"'"+",";sql += "?,";}if(this.getUrl() == null){sql += "'',";}else{sql += "'"+this.getUrl().replaceAll("'", "")+"'"+",";}if(this.getInfodate() == null){sql += "'',";}else{sql += "'"+this.getInfodate().replaceAll("'", "")+"'"+",";}if(this.getAuthor() == null){sql += "'',";}else{sql += "'"+this.getAuthor().replaceAll("'", "")+"'"+",";}if(this.getHits() == null){sql += "'',";}else{sql += "'"+this.getHits().replaceAll("'", "")+"'"+",";}if(this.getExpand() == null){sql += "'',";}else{sql += "'"+this.getExpand().replaceAll("'", "")+"'"+",";}if(this.getCreatetime() == null){sql += "'',";}else{sql += "to_date('"+this.getCreatetime()+"','yyyymmdd HH24:mi:ss'),"; //to_date('20140214','yyyymmdd')}if(this.getModifytime() == null){sql += "''";}else{sql += "to_date('"+this.getCreatetime()+",'yyyymmdd HH24:mi:ss'),";}sql += ")";return sql;}这是一个sql语句,content为大数据字段,content中注释的为方法一种使用的sql,没有注释的是方法二中使用的sql
方法一:参考上一篇转载的文章,代码如下:
public static void insert(String sql,String url,String content) {conn = getConnection();try {st = conn.createStatement(); // 创建用于执行静态sql语句的Statement对象 //st.executeUpdate(sql); // 执行插入操作的sql语句,并返回插入数据的个数 /** * clob数据太长超过4000,如下处理 * 1、插入一个空对象empty_clob() * 2、锁定数据行进行更新,注意“for update”语句 *///1、插入一个空对象empty_clob()sql = sql.replace("'"+content+"'", "empty_clob()");st.executeUpdate(sql);//2、锁定数据行进行更新,注意“for update”语句String sql2 = "select CONTENT from TB_NEWS where url='"+url+"' for update";//System.out.println(sql2);ResultSet rs = st.executeQuery(sql2);if(rs.next()){//得到java.sql.Clob对象后强制转换为oracle.sql.CLOBoracle.sql.CLOB clob = (CLOB) rs.getClob("content");outStream = clob.getCharacterOutputStream();//data是传入的字符串,定义:String datachar[] c = content.toCharArray();outStream.write(c, 0, c.length);}outStream.flush();conn.commit();} catch (Exception e) {if(e.getMessage().contains("唯一键约束"));else{logger.error("插入数据库出错,sql语句:"+sql);e.printStackTrace();}} finally{try {if(outStream!=null){outStream.close();}if(rs!=null){rs.close();}if(st!=null){st.close();}if(conn != null){conn.close();}} catch (Exception e) {e.printStackTrace();}}}
方法二:使用setCharacterStream来处理大数据插入问题,代码如下:
public static void insert(String sql,String content) {conn = getConnection();PreparedStatement statement = null;try {st = conn.createStatement(); // 创建用于执行静态sql语句的Statement对象 statement=conn.prepareStatement(sql);Reader reader=new StringReader(content);statement.setCharacterStream(1, reader,content.length());statement.executeUpdate();conn.commit();} catch (Exception e) {logger.error("插入数据库出错,sql语句:"+sql);e.printStackTrace();} finally{try {if(statement!=null){conn.close();}if(conn != null){conn.close();}} catch (Exception e) {e.printStackTrace();}}}
0 0
- Oracle处理CLOB超过4000入库问题 (2)
- Oracle处理CLOB超过4000入库问题
- 【转】Oracle + PHP Cookbook(php oracle clob 长度超过4000如何写入)
- oracle CLOB类型超过4000个字段sql插入方法
- oracle clob字段处理
- Oracle clob处理
- Oracle clob处理
- JAVA控制Oracle中BLOB、CLOB入库、出库
- oracle数据库中CLOB字段的处理问题
- oracle clob问题
- 自定义聚集函数,仿wm_concat,使用CLOB,可处理超过4000长度字符串
- Oracle CLOB字段处理方法
- hibernate 处理oracle clob办法
- oracle之CLOB处理完整版
- oracle之CLOB处理完整版
- PHP处理Oracle的CLOB
- JDBC 处理Oracle Clob字段
- c#处理oracle clob(一)——insert
- redis缓存数据需要指定缓存有效时间范围段的多个解决方案 Calendar+quartz
- eclipse最有用快捷键整理
- 关于Java Final 修饰的局部变量,多线程可以访问
- HDU 5710 Digit-Sum 数学杂题
- DevExpress GridControl使用
- Oracle处理CLOB超过4000入库问题 (2)
- 3.3 DXC简介——HANA数据抽取和同步
- 【待重置】记忆化搜索思想
- MapReduce 2.0应用场景、原理与基本架构
- 大话设计模式c++实现--简单工程模型
- 新生练习1(递推)
- opencv中的侧脸检测
- Oracle学习笔记三---oracle逻辑结构
- Linux下TCP/IP socket 编程二