Oracle 如何将图片插入BLOB字段

开发要求把两张图片插入到表中,趁机学了下oracle把图片插入blob字段的方法

1. 在操作系统创建一个oracle用户可以访问的目录

mkdir -p /home/oracle/picture

2. 把图片上传到该目录并允许oracle用户访问

3. 在数据库中创建目录

create or replace directory images as '/home/oracle/picture/';

4. 执行以下语句对已有数据进行更新

declare

 l_bfile bfile;

 l_blob blob;

begin

 update test_picture set 字段名=empty_blob() where ID='xxxx'

 return 字段名 into l_blob;

 l_bfile:=bfilename('IMAGES','xx.jpg');

 dbms_lob.open(l_bfile,dbms_lob.file_readonly);

 dbms_lob.loadfromfile(l_blob,l_bfile,dbms_lob.getlength(l_bfile));

 dbms_lob.close(l_bfile);

 commit;

end;

/

其中IMAGES为数据库目录名(区分大小写)

也可以利用存储过程进行插入

--创建存储图片的表
CREATE TABLE IMAGE_LOB (T_ID VARCHAR2 (5) NOT NULL,T_IMAGE BLOB NOT NULL);
--创建存储图片的目录
CREATE OR REPLACE DIRECTORY IMAGES AS 'C:/picture';
--在c:下自己建一个叫picture的文件夹
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;
--插入空的blob
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;
/
--在C:/picture下放一张图片1.gif
--将该图片存入表
exec IMG_INSERT('1','1.gif');

参考

Oracle中插入图片并显示(用BLOB类型) _SearchLife的专栏-CSDN博客

Oracle数据库中插入图片BLOB字段的方法_sunny05296的博客-CSDN博客_oracle 图片字段

  • 0
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
存储图片Oracle: ```c# using Oracle.DataAccess.Client; using System.Drawing; using System.IO; //连接Oracle数据库 string connString = "User Id=<username>;Password=<password>;Data Source=<datasource>"; OracleConnection conn = new OracleConnection(connString); conn.Open(); //将图片转换为字节数组 Image image = Image.FromFile("<imagePath>"); MemoryStream ms = new MemoryStream(); image.Save(ms, System.Drawing.Imaging.ImageFormat.Jpeg); byte[] imageBytes = ms.ToArray(); //插入图片数据到Oracle string sql = "INSERT INTO <tableName> (image_column) VALUES (:imageParam)"; OracleCommand cmd = new OracleCommand(sql, conn); OracleParameter param = new OracleParameter(":imageParam", OracleDbType.Blob); param.Value = imageBytes; cmd.Parameters.Add(param); cmd.ExecuteNonQuery(); //关闭连接 conn.Close(); ``` 读取OracleBLOB字段图片并显示到PictureBox: ```c# using Oracle.DataAccess.Client; using System.Drawing; using System.IO; //连接Oracle数据库 string connString = "User Id=<username>;Password=<password>;Data Source=<datasource>"; OracleConnection conn = new OracleConnection(connString); conn.Open(); //查询图片数据 string sql = "SELECT image_column FROM <tableName> WHERE <condition>"; OracleCommand cmd = new OracleCommand(sql, conn); OracleDataReader reader = cmd.ExecuteReader(); if (reader.Read()) { //从查询结果中读取图片数据 byte[] imageBytes = (byte[])reader["image_column"]; //将字节数组转换为Image对象 MemoryStream ms = new MemoryStream(imageBytes); Image image = Image.FromStream(ms); //将Image对象显示在PictureBox中 pictureBox1.Image = image; } //关闭连接 conn.Close(); ``` 其中 `<username>`、`<password>`、`<datasource>`、`<tableName>`、`<condition>` 需要根据实际情况进行替换。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Hehuyi_In

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值