在是用Ibatis是操作Oracle数据库字段类型为LONG的问题

查询语句:

	<select id="selectJingHuaBlogArticleCount" resultMap="result_JingHuaBlog" >
		<![CDATA[
		select * from (
		SELECT a.article_id,a.class_id,a.article_title,a.article_content,c.class_name,l.member_register_id,l.member_register_pic,l.member_register_okno
		 FROM article a,ARTICLE_CLASS c,login_information l 
		 WHERE a.class_id=c.class_id AND a.member_register_id=l.member_register_id AND a.pick=1 and a.auth=1
		)ttt where rownum < $count$		
	]]>
	</select>

 映射的结果对象:

	<resultMap class="article" id="result_JingHuaBlog">
		
		<result column="article_id" property="articleId" />
               <result column="article_content" property="articleContent"/>

		<result column="class_id" property="articleClass.classId" />
		<result column="class_name" property="articleClass.className" />
		<result column="article_title" property="articleTitle" />
		<result column="member_register_pic" property="loginInformation.memberRegisterPic" />
		<result column="member_register_okno" property="loginInformation.memberRegisterOkno" />
		<result column="member_register_Id" property="loginInformation.memberRegisterId" />
	</resultMap>
 

 

       是使用iBatis操作oracle数据库时,当你的字段类型为LONG类型的时候,查询出结果的时候会报流已经被关闭,这个问题困扰了我好几个小时,使用最基本的JDBC 对Oracle.Long型可以直接通过ResultSet.getString()读写的,一直就想不通为什么?我知道无论是LONG,CLOB还是BLOB实际上都只是resultset拿一个定位符,LONG和CLOB 就会在getString时侯打开一个流由JDBC转换成String;如果再次读同一个定位符就会得到这个"流已经关闭"的错误信息。不过,我就是检查 来检查去,无论如何发现不了重复执行两次get同一字段的代码。

       一直到我使用一个检测代码执行同样的取值时,发现如果在一行resultset中先读其他列然后再读这个Long列就会出同样 的错误。所以只要把上面的结果映射的

<result column="article_content" property="articleContent"/>

拿到最前面就一切正常,但是还是不明白为什么?

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值