请大家帮帮忙:用jsp向orecle数据库读写图片时遇到问题。j(100分)

  • 主题发起人 主题发起人 caicai-niao
  • 开始时间 开始时间
C

caicai-niao

Unregistered / Unconfirmed
GUEST, unregistred user!
我向orecle数据库blob字段插入图片〉2k后再读出时出现问题
java.lang.NULLPointerException 这是什么意思??

我的程序如下:
.......
oracle.sql.BLOB bin=((OracleResultSet)rs).getBLOB("pic");
try{
InputStream in=bin.getBinaryStream();
}
catch(Exception e)
{
out.print("in error="+e.toString()+" ");
就是这句指出的出错信息
}
if(bin==null || bin.equals(""))
{
out.print("istream=null");
}
else
{
size=bin.getBufferSize();
byte[] picdate=new byte[size];
FileOutputStream fos=new FileOutputStream("d://readpic.jpg");
int bytesRead = 0;
while ((bytesRead = in.read(picdate)) != -1) {
fos.write(picdate, 0, bytesRead);
}
}
。。。。。。
文件小的时候就可以,但是文件大于2k就出错
还有,blob字段有大小吗?怎么设置?
 
解决方案,把图片路径和文件名,存入数据库,供参考。
 
我考虑过,不好
 
caicai-niao:
为什么不好?
用文件服务器存储图片和大量文本,可以减轻数据库服务器压力。
并且速度也会提高。
负载平衡
 
首先,不要将不可估计的大字段或文件存入数据库。
我们的程序要考虑到可重用性。
现在,仅就你这个问题,做一下具体问题具体分析。呵呵
给段代码先:
写:
File attachmentFile = new File(路径,文件名);
BufferedOutputStream out = new BufferedOutputStream(new FileOutputStream(attachmentFile));
byte buf[] = new byte[1024];
int fileSize = 0;
int i;
while((i = data.read(buf)) >= 0)
{
fileSize += i;
out.write(buf, 0, i);
}
out.close();
size = fileSize;
if(size > factory.getAttachmentManager().getMaxAttachmentSize() * 1024)
{
(new File(路径,文件名)).delete();
throw new AttachmentException(0);
}
读:
File attachmentFile = new File(路径,文件名);
BufferedInputStream data = new BufferedInputStream(new FileInputStream(attachmentFile));
return data;
至于数据库中嘛,就是写你附件的文件名,日期,大小等等信息。
 
对了,还要动态指定附件的contentType.
 
我今天把数据库pic字段属性改为long raw后就没问题了,我想知道的是为什么weblogic6.1对存取
oracle数据库的blob字段有问题。我看了jdbc连结的log文件,结果发现数据流>2k时
weblogic以loang raw类型进行传输,但写入数据库不报错,只是一空值,是不是
要对数据库的blob字段进行设置?
 
size = 1024 * 2;
 
参考
http://www.java-cn.com/
 
后退
顶部