hibernate中blob大2进制文件的问题?

03-08-29 yuechun
如何将大的2进制文件文件存到oracle、mssqlserver等数据库中,oracle中存clob成功,就是不能将2进制文件放进去,我的oracles是8i...

yuechun
2003-09-01 10:31
没有用用过的吗?只要是大于4k的文件都不能保存

yuechun
2003-09-09 12:37
up

befresh
2003-09-09 12:58
clob(Character Large Objects)是存字符的,也就是大的文本文件。

blob(Binary Large Objects)才是存二进制大对象的。

还有连接Oracle的jdbc如果是用thin的方式,则只能存储4k;如果想存储更大的对象,需要使用oci方式。

robbin
2003-09-09 14:19
乱讲,我就是thin连接,插入1.2MB的blob型数据。

yangstarfly
2003-09-10 09:17
可以插入大于4k的,不过要做特别处理

在 design pattons里面有篇文章专门讲这个问题的

http://hibernate.bluemars.net/56.html

iceant
2003-09-10 10:24
我直接使用Oracle 的驱动来输入 blob 的。

没听说过 thin 的驱动只能输入 4k 的说法,也许是孤陋寡闻~~

就我自己的经历,试过插入大于 1M 的文本。

yuechun
2003-09-10 10:36
各位数据库驱动是什么,我是按照http://hibernate.bluemars.net/56.html中的例子来的,确实不成功

请成功的网友贴点例子

befresh
2003-09-10 11:03
大家可以参考一下:http://asktom.oracle.com/pls/ask/f?p=4950:8:4435890365134197305::NO::F4950_P8_DISPLAYID,F4950_P8_CRITERIA:1310802216301,

这个thin的连接的问题,我没有仔细的调查清楚,当初有一哥们是用jsp+(weblogic+connectionpool),pool是使用thin的方式的,结果往long类型的字段插入>4000字符就会出错,后来weblogic的连接池改了配置以后,就可以了。

因此我怀疑可能是驱动程序的不同造成这样的问题的。一般的使用type 1类型的容易出这个问题,如果都是使用oracle classes111.zip是不是有这个问题,我没有测试。当然使用oci应该不会出问题的。

yangstarfly
2003-09-10 11:17
我曾经成功的插入过大于4k的数据。下面是我做的一个完整的程序:

public void createFile(Long folder_id, InputStream content) throws Exception {

Session session = sessions.openSession();

Transaction tx = null;

Content_file file = new Content_file();

file.setContent(Hibernate.createBlob(new byte[1]));

Content_folder folder = (Content_folder) session.load(Content_folder.class,

folder_id);

file.setFolder_id(folder_id);

try {

tx = session.beginTransaction();

session.save(file);

session.flush();

session.refresh(file, LockMode.UPGRADE);

oracle.sql.BLOB blobs = (oracle.sql.BLOB) file.getContent();

OutputStream os = blobs.getBinaryOutputStream();

int chunk = blobs.getChunkSize();

byte[] buffer = new byte[chunk];

int bytesread = 0;

while ( (bytesread = content.read(buffer, 0, chunk)) != -1) {

os.write(buffer, 0, bytesread);

}

os.flush();

os.close();

tx.commit();

}

catch (HibernateException he) {

if (tx != null)

tx.rollback();

throw he;

}

猜你喜欢