如何取得Oracle中Clob类型的值?-在线等,先谢谢各位!

jdjwxj 2010-09-25 03:56:12
数据库是Oracle10.2.0版本,Struts1.3,spring2.0,Hibernate3.0
现在数据库里一个表中有个字段用的是Clob的数据类型
我在java实体类里写的String类型,在添加的方法中可以正常写入值,但是查询的时候,查出的可能是Clob的值,怎么让他变成Sting可以在页面显示出来?网上查了一些,但是没找到解决办法,希望大侠们帮忙,谢谢!
...全文
892 19 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
jianwen112 2011-07-23
  • 打赏
  • 举报
回复
好点点滴滴点点滴滴点点滴滴地对地导弹
blazingfire 2010-09-25
  • 打赏
  • 举报
回复
oracle 10g以后,clob和varchar2用法基本一样。
用hibernate时,clob和varchar2字段在hbm文件里配置也差不多,clob里不用设长度属性就好了
苹果的小弟 2010-09-25
  • 打赏
  • 举报
回复
又写了一种写法,要是以上的 不行 ,那这个 应该没问题 呵呵 楼主 可以试下哈
import oracle.jdbc.OracleResultSet;
import oracle.sql.CLOB;
CLOB clob = ((OracleResultSet)rs).getCLOB("HPT_CONTENT");
if(clob!=null){
String content ="";
Reader is=clob.getCharacterStream();
BufferedReader br=new BufferedReader(is);
String ss=br.readLine();
while(ss!=null){
content+=ss+",";
ss=br.readLine();
}
System.out.println(content);
jdjwxj 2010-09-25
  • 打赏
  • 举报
回复
谢谢,我加了个属性
private HptGuideDocMapper rowMapper = new HptGuideDocMapper();

private static final class HptGuideDocMapper implements
ParameterizedRowMapper<HptGuideDoc>{
public HptGuideDoc mapRow(ResultSet rs, int arg1) throws SQLException{
HptGuideDoc hptGuideDoc = new HptGuideDoc();
LobHandler lob = new OracleLobHandler(); //在这里加了这个
hptGuideDoc.setId(rs.getInt("ID"));
hptGuideDoc.setHtpType(rs.getInt("HPT_TYPE"));
hptGuideDoc.setHptTitle(rs.getString("HPT_TITLE"));

//lob.getClobAsString(rs, "HPT_CONTENT");
hptGuideDoc.setHptContent(lob.getClobAsString(rs, "HPT_CONTENT"));//这样用就可以了。
hptGuideDoc.setHptLabel(rs.getString("HPT_LABEL"));
return hptGuideDoc;
}
}

谢谢大家,结贴给分!
苹果的小弟 2010-09-25
  • 打赏
  • 举报
回复
不过 我 刚刚试了一下 直接用 rs.getString("HPT_CONTENT")方法 是可以获取值的,我用
System.out.println(rs.getString("HPT_CONTENT"));可以打印出 数据库里面的 实际数据
苹果的小弟 2010-09-25
  • 打赏
  • 举报
回复
hptGuideDoc.setHptContent(res.getClob("HPT_CONTENT").toString())
试试
应该 在 加一句判断 if(res.getClob("HPT_CONTENT") !=null ){
hptGuideDoc.setHptContent(res.getClob("HPT_CONTENT").toString())

}
jdjwxj 2010-09-25
  • 打赏
  • 举报
回复
public List<HptGuideDoc> searchAllHptGuideDocList() {
// TODO Auto-generated method stub
logger.info("HptGuideDocJDBCDao执行searchAllHptGuideDocList!");
StringBuffer bf = new StringBuffer();
bf.append("SELECT * FROM HPT_GUIDE_DOC");
logger.info(bf.toString());
return getSimpleJdbcTemplate().query(bf.toString(), rowMapper);
}

private HptGuideDocMapper rowMapper = new HptGuideDocMapper();

private static final class HptGuideDocMapper implements
ParameterizedRowMapper<HptGuideDoc>{
public HptGuideDoc mapRow(ResultSet rs, int arg1) throws SQLException{
HptGuideDoc hptGuideDoc = new HptGuideDoc();
hptGuideDoc.setId(rs.getInt("ID"));
hptGuideDoc.setHtpType(rs.getInt("HPT_TYPE"));
hptGuideDoc.setHptTitle(rs.getString("HPT_TITLE"));
hptGuideDoc.setHptContent(rs.getString("HPT_CONTENT"));
hptGuideDoc.setHptLabel(rs.getString("HPT_LABEL"));
return hptGuideDoc;
}
}
苹果的小弟 2010-09-25
  • 打赏
  • 举报
回复
把 查询的 方法 给出来看下
jdjwxj 2010-09-25
  • 打赏
  • 举报
回复
我现在是这样做的,定义一个实体类,
这个对应的属性是
private String hptContent;
保存的时候没有问题,只是数据库还是显示<CLOB>,点后面的...可以看到它的值
但是查询出来的话显示的值是oracle.sql.CLOB@787ee7这个
tlw0121 2010-09-25
  • 打赏
  • 举报
回复
帮顶帮顶帮顶
苹果的小弟 2010-09-25
  • 打赏
  • 举报
回复
那 你保存 数据的时候 是咋个保存的 呢 ?????
没有 直接保存对象吗????
jdjwxj 2010-09-25
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 b5830440 的回复:]

你用 hibernate 当然 是对应的 hibernate 配置文件里面了三
[/Quote]
我没有用到映射文件,所有配置都写在applicationContext.xml文件里了,这段应该写在哪个标签下面啊?谢谢!
zcy9979420 2010-09-25
  • 打赏
  • 举报
回复
需要通过byte[]转一下
jdjwxj 2010-09-25
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 zhoupuyue 的回复:]

实体类里面返回String不可以吗?
public String getXxx(){
return xxx;
}
[/Quote]
这样是不行的,可以写入,但是不能读取
苹果的小弟 2010-09-25
  • 打赏
  • 举报
回复
你用 hibernate 当然 是对应的 hibernate 配置文件里面了三
jdjwxj 2010-09-25
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 b5830440 的回复:]

<property name="remark" type="org.springframework.orm.hibernate3.support.ClobStringType" length="1048576000">
<column name="REMARK" not-null="false" unique="false" sql-type="CLOB"/>
……
[/Quote]
这个property写在哪里?
苹果的小弟 2010-09-25
  • 打赏
  • 举报
回复
<property name="remark" type="org.springframework.orm.hibernate3.support.ClobStringType" length="1048576000">
<column name="REMARK" not-null="false" unique="false" sql-type="CLOB"/>
</property>

public String getRemark() {
return remark;
}
public void setRemark(String remark) {
this.remark = remark;
}

这样 试试 哈 楼主
阿_布 2010-09-25
  • 打赏
  • 举报
回复
实体类里面返回String不可以吗?
public String getXxx(){
return xxx;
}
jdjwxj 2010-09-25
  • 打赏
  • 举报
回复
大哥们!帮帮忙吧!!谢谢了!

81,122

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧