将图片插入到BLOB类型的字段中
创新互联10多年成都企业网站建设服务;为您提供网站建设,网站制作,网页设计及高端网站定制服务,成都企业网站建设及推广,对餐厅设计等多个方面拥有多年的营销推广经验的网站建设公司。
建立一个表:create table a(a blob);
建立一个目录:create directory tmp as 'e:\';
建立一个PL/SQL块:
declare
b_file bfile;
b_lob blob;
begin
insert into a(a) values(empty_blob()) return a into b_lob;
--为了使PL/SQL编译成功,必须先为该列插入一个empty_blob() 值,return a into b_lob将该列与一个blog类型的变量绑定在一起,以后只要为b_lob赋值,即等于将该值插入了表中。
b_file:=bfilename('tmp','filename.jpg');
--tmp是建立的文件所在的目录,filename.jpg是文件名;将文件转换为bfile类型
dbms_lob.open(b_file,dbms_lob.file_readonly);--将b_file 以只读的方式打开
dbms_lob.loadfromfile(b_lob,b_file,dbms_lob.getlength(b_file));-- 将b_file中的内容转换到b_lob中
dbms_lob.close(b_file);
commit;
end;
在开发过程中,经常会遇到oracle中存图片的情况,下面就为您想介绍一个可以轻松在oracle中存图片的方法,希望对您能有所帮助。
一个存储图片文件的过程,任何开发工具都可以通过调用过程把图片文存储到数据库中。
oracle中存图片的详细步骤:
SQL connect chanet/chanet@oradb;
已连接。
SQL CREATE TABLE IMAGE_LOB (T_ID VARCHAR2 (5) NOT NULL,T_IMAGE BLOB NOT NULL);
表已创建。
SQL CREATE OR REPLACE DIRECTORY IMAGES AS 'C:\Oracle'; --图片目录
目录已创建。
SQL CREATE OR REPLACE PROCEDURE IMG_INSERT (TID VARCHAR2,FILENAME VARCHAR2) AS F_LOB BFILE; B_LOB BLOB; BEGIN INSERT INTO IMAGE_LOB (T_ID, T_IMAGE) VALUES (TID,EMPTY_BLOB ()) RETURN T_IMAGE INTO B_LOB; F_LOB:= BFILENAME ('IMAGES', FILENAME); DBMS_LOB.FILEOPEN (F_LOB, DBMS_LOB.FILE_READONLY); DBMS_LOB.LOADFROMFILE (B_LOB, F_LOB, DBMS_LOB.GETLENGTH (F_LOB)); DBMS_LOB.FILECLOSE (F_LOB); COMMIT; END; /
过程已创建。
SQL EXEC IMG_INSERT('1','f_TEST.jpg');
PL/SQL 过程已成功完成。
例:假设给oracle数据库导入blob类型的图片,图片放在目录G:\images下。
1.先创建一个目录directory,命名为IMAGES;
CREATE OR REPLACE DIRE,TORY
IMAGES AS 'G:\test';或者直接在PlSql Directories目录下新建目录;
2.创建一个存储过程,批量导入blob
create or replace procedure img_insert asbeginDECLARE
f_lob bfile;--文件类型b_lobblob;
--用来存储图片的名称filenamevarchar2(400);begin
--循环的初始值for i in 1
.. 100 loop
--找出每一列的文件名,因为文件名和图片名称是一样的
select t.flnm into filename from ZS_GC_SNIMDT t where t.id =i;
--查找到之后,执行update操作,插入空的blob (注意IMAGES一定要大写)
update ZS_GC_SNIMDT set brfl = empty_blob()whereid = i return brfl into b_lob;
--获取指定目录下的文件
f_lob := bfilename('IMAGES', filename);
-- 以只读的方式打开文件
dbms_lob.fileopen(f_lob, dbms_lob.file_readonly);--传递对象
dbms_lob.loadfromfile(b_lob, f_lob,
dbms_lob.getlength(f_lob));
--关闭原始文件
需要编写程序,将图片以二进制流的方式读取并插入到数据库数据表中。数据库中对应字段类型可设置为BLOB
create table test
(
NID VARCHAR2(1) not null,
IMG BLOB,
zhengqueFlag VARCHAR2(1),
cuowuFlag VARCHAR2(1)
)
说明:
1、IMG字段只需要保存图片,将图片信息经过Base64编码,存到数据库BLOB字段中。显示的时候要经过Base64解码。
2、对于像“正确”、“错误”用标志位在区别。你可以用1表示正确、0表示错误。当然你也可以用汉字的保存这样的信息。自己来设计。
然后你到网上查一下怎么样对BLOB字段进行操作。如果不行,我在增加回复。
1、使用blob将图片保存为二进制格式,(可以用浏览器来转换)随后用base64编码来保存图片,再将base64编码保存进数据库的clob类型字段上。
2、然后要用一个数据名称System.Data.OracleClient。
3、创建一个储存文件,然后把相关代码写入比如string execSql="insert into clob_table(clob_id,) values(1,:clob_pic);"编写代码的时候注意,后缀的符号(;")也要写入,不然无法进行下一步指令。
4、之前上面用的是base64编码,当显示图片的时候要将图片输出到浏览器流中,不然在base64里面是看不到图片。
5、在输出的时候要把图片转换成二进制(buffur即二进制编码)。
6、随后上传即可,然二进制流也可以存成文件(File)存到FTP服务器,当需要的时候可以根据路径进行下载的。