最近需要用Oracle数据库保存图片,于是进行了一下研究。其实不管是文档、图片、还是视频,这些都属于非结构化数据,保存的关键在转换类型,下面进行总结。
1.在数据库表中建立一个LOB类型的字段,这种类型是专门用来保存图片等非结构化数据的,Oracle和SQL
Server等大型数据库都支持这样的类型。
具体类型可能会有若干种,Oralcle支持BLOB、CLOB、NCLOB、BFILE,BLOB是二进制型大对象,CLOB和NCLOB都是字符型大对象,BFILE只存储文件指针,实际的文件是存储在文件系统中的。一般采用BLOB,它支持最大4G的数据。
2.在程序中将图片转化成字节数组。例如:
MemoryStream mstream = new
MemoryStream();
image.Save(mstream,
System.Drawing.Imaging.ImageFormat.Jpeg);
byte[] imageData =
mstream.ToArray();
3.用SQL语句进行操作,方法和普通字段类似,只是在要指定字段内容的时候采用参数,将字节数组通过参数传入。例如:
CREATE
TABLE table(ID NUMBER(3), PHOTO BLOB)
INSERT INTO table(ID,PHOTO)
VALUES('1', :Photo)
:PHOTO是参数,注意这是在Oracle中的写法,在SQL Server中应该是@PHOTO。
4.取出图像的时候只要将object强制转化为字节数组,再转化为图像即可。例如:
MemoryStream mstream =
new MemoryStream((byte[])imageData);
Image
image=Image.FromStream(mstream);
其实对BLOB的操作也可以利用.Net的相关类库,不过我没用过,在此不表。