日期:2014-05-17  浏览次数:21073 次

有关Oracle bfile数据类型的问题
我的目的是将客户端本地的图片文件上传保存到服务器的oracle数据库中,使用bfile数据类型储存数据。



在客户端用SQL*PLUS输入以下红色代码:
以sysdba身份登录
1.先在oracle数据库中建立一个目录别名,用于将文件定位指针映射到文件系统:  

create DIRECTORY 'tmpdir' AS 'D:/tmp';

 tmpdir表示逻辑目录名,' D:/tmp'是实际目录。 注意该目录oracle应该有读权限 
2.根据需要授权 
GRANT READ ON DIRECTORY tmpdir TO scott;
3.以scott用户登录
建立一个含有bfile字段的表 

create table bfiletest(id number(3), fname bfile);

4.插入数据 

 这里需要使用bfilename来进行bfile字段的insert 或者 update操作 

INSERT INTO bfiletest VALUES (1, BFILENAME ('TMPDIR', 'a.JPG'));

 bfilename的参数1是DIRECTORY名,参数2是文件名。注意:这一行中插入的是 

一个指向D:/tmp的文件定位指针映射,不是文件本身。 

…………………………………………………………………………………………………………………………
请问,我要把本地的图片文件上传到服务器的数据库,为什么用以上代码不能实现,上传后fname值为value error。
如果我把文件放在服务器的路径D:/tmp下,再用以上代码,数据就正常了,在客户端用PL/SQL可以查看到图片。
如果我想把客户端的本地图片保存在服务器oracle数据库,保存图片数据类型为bfile,是不是得用别的方法先把文件传到服务器,然后再用以上代码进行数据库路径和文件绑定?看了不少资料,很多都没有说清楚这些问题,盼了解的人指点。



------解决方案--------------------
bfile是把文件放在数据库外,数据库只是记录了文件位置。
blob是把文件内容放在数据库里面,但也得借助bfile才能把文件内容存放到数据库。
你要么就先把文件上传到数据库服务器,再处理。
要么就用JDBC的java.sql.Blob接口生成blob参数传给INSERT语句。