JAVA处理Oracle数据库CLOB读写操作
2012-08-27 14:28
323 查看
Oracle中大字段的存储使用CLOB类型,但是该类型却不能像其他类型一样直接在POJO中读写。针对这个问题,网上有各种不同的方法,但是有些却太过复杂,有些又言语不清,看不明白,所以我在此讲述一下其中一种最简单的方法。
在创建POJO时,多创建一个String类型来处理这个CLOB的读写。
现在有数据库字段如下:
那么POJO中的字段如下:
contentString 用于与页面交互,即页面显示时读取的是些变量,页面提交时内容也存放在此变量中。但在框架的映射中并不配置此变量,如下:
下边来看看在JAVA中如何使用。
读取时,先将content(CLOB)中的内容放到contentString(String)中,然后可以再页面直接使用contentString 。
JAVA中:
页面中使用时就和平常的String一样:
写入时,将contentString(String)中的内容赋值到content(CLOB)中,直接如其他变量一般存储就行。
如未用Hibernate时,使用注释的内容,有可能报如下错误:
java.lang.ClassCastException: javax.sql.rowset.serial.SerialClob
如报此错误,DAO中保存时如下:
String sql = "insert into tableName(id, title, content) values ('1', 'test', ?) ";
PreparedStatement pstmt=con.prepareStatement(sql);
java.io.Reader clobReader = new java.io.StringReader(contentString);
psm.setCharacterStream(1, clobReader, str.length());
在创建POJO时,多创建一个String类型来处理这个CLOB的读写。
现在有数据库字段如下:
id varchar2(32) not null primary key, title varchar2(255) unique, content clob,
那么POJO中的字段如下:
private String id; private String title; private Clob content; private String contentString; //存放content内容
contentString 用于与页面交互,即页面显示时读取的是些变量,页面提交时内容也存放在此变量中。但在框架的映射中并不配置此变量,如下:
<id name="id" type="java.lang.String"> <column name="ID" length="18" /> <generator class="assigned"></generator> </id> <property name="title" type="java.lang.String"> <column name="TITLE"/> </property> <property name="content" type="java.sql.Clob"> <column name="CONTENT"/> </property>
下边来看看在JAVA中如何使用。
读取时,先将content(CLOB)中的内容放到contentString(String)中,然后可以再页面直接使用contentString 。
JAVA中:
webContent = list.get(0); //list 是从数据库中查询出的所有内容 if(webContent.getContent() != null && !"".equals(webContent.getContent())) { Clob clob = webContent.getContent(); try { //getSubString(L, L) 方法将Clob 转成String;参数1:开始位置(第1个数为:1),参数2:长度 String content = webContent.getContent().getSubString(1L, (int)clob.length()); webContent.setContentString(content); } catch (SQLException e) { System.out.println("内容读取错误!"); e.printStackTrace(); } }
页面中使用时就和平常的String一样:
<%=webContent.getContentString() %> <!--在struts2中也可以这样写--> ${webContent.contentString}
写入时,将contentString(String)中的内容赋值到content(CLOB)中,直接如其他变量一般存储就行。
String content = (String) request.getParameter("contentString"); if(content != null && !"".equals(content)) { webContent.setContent(Hibernate.createClob(content)); /* * 如没有使用Hibernate * java.sql.Clob clob = new javax.sql.rowset.serial.SerialClob(content.toCharArray()); * webContent.setContent(clob); */ } else { content=""; webContent.setContent(Hibernate.createClob(content)); } this.getHibernateTemplate().saveOrUpdate(webContent);
如未用Hibernate时,使用注释的内容,有可能报如下错误:
java.lang.ClassCastException: javax.sql.rowset.serial.SerialClob
如报此错误,DAO中保存时如下:
String sql = "insert into tableName(id, title, content) values ('1', 'test', ?) ";
PreparedStatement pstmt=con.prepareStatement(sql);
java.io.Reader clobReader = new java.io.StringReader(contentString);
psm.setCharacterStream(1, clobReader, str.length());
相关文章推荐
- java语言操作Oracle数据库中的CLOB数据类型
- java语言操作Oracle数据库中的CLOB数据类型
- java语言操作Oracle数据库中的CLOB数据类型
- Java对文件的随机读写以及压缩处理操作
- java语言操作Oracle数据库中的CLOB数据类型
- 用MD5函数处理oracle数据库中clob字段在where条件或者group中使用
- 好记性不如烂笔头18-java对Oracle的CLOB字段的操作
- 操作分布式文件之八:如何批量并行读写远程文件和事务补偿处理
- java操作ORACLE数据库JDBC[整理]
- 90.Java处理数据库中的Clob对象【ClobtoString】
- Java 中对文件的读写操作之比较
- java中操作Oracle数据库(通过JDBCODBC驱动,OS:windows 2000)
- Java 文件任意位置读写操作(首尾读写都可以)
- Java——IO流读写对象及流操作规律
- java File处理操作
- iMOOC学习笔记:Java的Excel读写操作入门实践-创建高版本的Excel文件
- Java中对文件的读写操作
- Java的文件读写操作
- JAVA对字符型文件的读写操作(FileReader、FileWriter)
- 【Java】File类文件管理及IO读写、复制操作