欢迎光临
我们一直在努力

在Java中使用Oracle blob-JSP教程,Java技巧及代码

建站超值云服务器,限时71元/月

oracle中的lob (large object)可以存储非常大的数据(可能是4gb),这样就可以通过将文件或其它任何对象序列化成字节输出流(outputstream)后写入数据库,之后使用字节输入流(inputstream)将数据读出然后反序列化为原始文件或对象。操作时需要使用oracle的jdbc包,它扩展了sun的jdbc包中的blob对象。同时需要注意一些细节。下面的代码演示如何使用blob(实例中需要oracle的jdbc包)。

import oracle.jdbc.oracleresultset; // 使用oracle的resultset对象

import oracle.sql.blob; // 使用oracle的blob对象,而不是sun的blob

try{

connection conn=<数据库连接>;

file file=<存入数据库的文件对象>;

conn.setautocommit(false); // 取消connection对象的auto commit属性

string file_name=file.getname();

// 数据库中有一个item表,其中的file_name (varchar2)存储文件名,file_blob (blob)存储文件对象

string sql="insert into item (file_name,file_blob) values (" + file_name + ",empty_blob())"; // 使用“empty_blob()“成生一个空blob

statement stmt=conn.createstatement();

int count=stmt.executeupdate(sql);

sql="select file_blob from item where iid=" + iid + " for update"; // 使用“for update”得到表的写锁

resultset rs=stmt.executequery(sql);

rs.next();

blob blob=((oracleresultset)rs).getblob("file_blob"); // 得到blob对象

outputstream out=blob.getbinaryoutputstream(); // 建立输出流

inputstream in=new fileinputstream(file); // 建立输入流

int size=blob.getbuffersize();

byte[] buffer=new byte[size]; // 建立缓冲区

int len;

while((len=in.read(buffer)) != -1)

out.write(buffer,0,len);

in.close();

out.close();

conn.commit();

}

catch(exception ex){

try{

conn.rollback();

}

catch(sqlexception sqle){

system.err.println(sqle.getmessage());

}

}

如果要读出文件的话只需调用blob的getbinarystream()生成一个输入流,再写入一个文件就行了。

赞(0)
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com 特别注意:本站所有转载文章言论不代表本站观点! 本站所提供的图片等素材,版权归原作者所有,如需使用,请与原作者联系。未经允许不得转载:IDC资讯中心 » 在Java中使用Oracle blob-JSP教程,Java技巧及代码
分享到: 更多 (0)

相关推荐

  • 暂无文章