2008-07-08
在是用Ibatis是操作Oracle数据库字段类型为LONG的问题
关键字: ibatis查询语句:
<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"/>
拿到最前面就一切正常,但是还是不明白为什么?
发表评论
- 浏览: 13810 次

- 详细资料
搜索本博客
我的相册
ttttt
共 7 张
共 7 张
链接
最新评论
-
Java实现按照要求的尺寸对 ...
只能缩小不能放大啊!
-- by likehibernate -
tomcat 6 el表达式的问题
tomcat6 中对5.0中这样的判断 ${not empty command ...
-- by hf200012 -
tomcat 6 el表达式的问题
这个是Tomcat6 的bug:https://issues.apache.or ...
-- by codeutil -
Java实现按照要求的尺寸对 ...
透明的png图片缩放后的图片就不透明了! 怎么解决啊?
-- by form_rr -
[以解决]请教iBatis批量 ...
问题以解决,是因为#oknos#这个地方的#换成$就可以,因为Ibatis认为这 ...
-- by hf200012






评论排行榜