您的位置:首页 > 数据库 > Oracle

ibatis中操作Oracle的blob,clob大数据方法

2009-08-22 00:58 726 查看
在ibatis中处理blob,clob数据的方法比较简单,但有一些需要注意的地方。首先在早期的ibatis版本中,对这方面的支持其实也不算太好了,得实现一个接口。从某个版本(记不清了),ibatis对大数据的支持比较好了。具体做法如下:

1、对于blob数据的操作sqlmap的定义中并没有什么特别的,只是在定义POJO时,blob字段应该对应byte[]类型的数据即可。如:

<!--获取一个文件,字段仅列出目前使用得到的-->
<select id="get" parameterClass="int" resultMap="fileResult">
<!--[CDATA[SELECT ID, NAME, AUTHOR, HITS, PUBLISHDATE, CONTENT, FILETYPE, AUDIENCE, REPORTNAME, TYPEBYCONTENT, TYPEBYTIME FROM NM_FILE WHERE ID=#value#]]>
</select>
<!--插入文件-->
<insert id="insert" parameterClass="file">
<![CDATA[INSERT INTO NM_FILE(ID, NAME, AUTHOR, HITS, PUBLISHDATE, CONTENT, FILETYPE, AUDIENCE, REPORTNAME, TYPEBYCONTENT, TYPEBYTIME) VALUES(NM_FILE_SEQ.NEXTVAL, #name#, #author#, #hits#, #publishDate#, #content#, #fileType#, #audience#, #reportName#, #typeByContent#, #typeByTime#)]]-->


以上这些语句与普通的CRUD并没有什么区别。再来看POJO的定义:

package com.xust.myweb.bg.domain;
import java.util.Date;
public class File
{
/*
* 文件ID
*/
private int id;
/*
* 文件名称
*/
private String name;
/*
* 发布者
*/
private String author;
/*
* 下载次数
*/
private int hits;
/*
* 发布时间
*/
private Date publishDate;
/*
* 文件内容
*/
private byte[] content;
/*
* 文件类型
*/
private String fileType;
/*
* 面向对象
*/
private String audience;
/*
* 报表名称
*/
private String reportName;
/*
* 按内容的报表类型
*/
private String typeByContent;
/*
* 按时间分的报表类型
*/
private String typeByTime;
。。。


程序中的代码就OK了,以下再给出单位测试代码:

@Test
public void testInsertFile()
{
byte[] data = new byte[58889];
for(int i = 0; i < data.length; i++)
{
data[i] = (byte)(i % 256);
}
File source = new File();
source.setName("测试文件.rar");
source.setAuthor("老张");
source.setPublishDate(new Date());
source.setContent(data);
source.setAudience("001");
source.setReportName("生产**报表");
source.setTypeByContent("生产计划");
source.setTypeByTime("年报");
try
{
assertNull(sqlMapClient.insert("file.insert", source));
Util util = UtilOracleImpl.getInstance();
assertEquals(1, util.getRowCount("NM_FILE"));
}
catch(Exception e)
{
e.printStackTrace();
fail("无法增加新闻!");
}


本该大功告成的,但是由于本人所在项目中使用的Oracle 9i,没想到Oracle早期的JDBC Driver对大数据的操作有限制(不能超过4k)。没办经过在网上分享其他网友的经验,更新版本后一切OK!恭喜恭喜!!!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息