要在oracle里面存入图片 用 blob类型

首先在数据库里建立:

--连接到管理员

conn sys/tbsoft as sysdba;

--为scott用户授权

grant create any directory to

scott;

--回到scott用户

conn scott/tiger;

--创建存储图片的表

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

--将该图片存入表

call IMG_INSERT('1','1.gif');

然后创建一个web项目 连接数据库后 创建一个BlobDAO类

用来取出表中的blob类型图片

public class BlobDAO {

private static final BlobDAO instance = new BlobDAO();

private Connection conn = null;

private BlobDAO() {

}

public static BlobDAO getInstance() {

return instance;

}

private void initConn() {

conn =

DBAccess.getInstance().getConn();

}

public byte[] getImage(String imgname) {

BufferedInputStream

ins;//取得BLOB的IO流

byte[] bt = null;

initConn();

Blob bo = null;

PreparedStatement ps =

null;

ResultSet rs = null;

String sql = "select T_IMAGE

from IMAGE_LOB where t_id=?";

try {

ps =

conn.prepareStatement(sql);

ps.setString(1, imgname);

rs = ps.executeQuery();

if (rs.next()) {

bo = rs.getBlob("T_IMAGE");

try {

ins = new

BufferedInputStream(bo.getBinaryStream());

int

bufferSize = (int) bo.length();//取得BLOB的长度

bt = new

byte[bufferSize];

try {

ins.read(bt, 0, bufferSize);

} catch

(IOException e) {

// TODO

Auto-generated catch block

e.printStackTrace();

}

//建立字节缓存

} catch (SQLException e) {

// TODO

Auto-generated catch block

e.printStackTrace();

}

}

} catch (SQLException e)

{

// TODO Auto-generated catch

block

e.printStackTrace();

} finally {

try {

rs.close();

ps.close();

conn.close();

} catch (SQLException e)

{

// TODO Auto-generated catch block

e.printStackTrace();

}

}

return bt;

}

}

在action里面调用getImage()方法并显示图片在页面上

public ActionForward

execute(ActionMapping mapping, ActionForm form,

HttpServletRequest request,

HttpServletResponse response) {

// TODO Auto-generated method

stub

BlobDAO blobDAO =

BlobDAO.getInstance();

byte[] bs =

blobDAO.getImage("1");

try {

response.getOutputStream().write(bs);

} catch (IOException e) {

// TODO Auto-generated catch

block

e.printStackTrace();

}

return null;

}

添加图片到数据库

请在c盘下放入图片--c:\\4.gif

public void savaImg(String imgId)

{

//传的是存入数据库图片的id

initConn();

Statement st = null;

BLOB blob = null; //图片类型

OutputStream outputStream = null; //输出流

File file = null; //文件

InputStream inputStream = null; //输入流

ResultSet rs = null;

try {

conn.setAutoCommit(false); //事物由程序员操作

st = conn.createStatement();

st.executeQuery("insert into IMAGE_LOB values('"+

imgId +"',empty_blob())");

rs = st.executeQuery("select T_IMAGE from

IMAGE_LOB where t_id='"+ imgId +"' for update");

if (rs.next()) {

blob = (BLOB) rs.getBlob(1);

outputStream = blob.getBinaryOutputStream();

file = new File("c:\\4.gif");

inputStream = new FileInputStream(file);

byte[] b = new byte[blob.getBufferSize()];

int len = 0;

while ((len = inputStream.read(b)) != -1) {

System.out.println(len);

outputStream.write(b, 0, len);

}

}

} catch (SQLException e) {

// TODO Auto-generated catch block

e.printStackTrace();

} catch (FileNotFoundException e) {

// TODO Auto-generated catch block

e.printStackTrace();

} catch (IOException e) {

// TODO Auto-generated catch block

e.printStackTrace();

} finally {

try {

inputStream.close();

outputStream.flush();

outputStream.close();

rs.close();

st.close();

conn.commit();

conn.close();

} catch (IOException e) {

// TODO Auto-generated catch block

e.printStackTrace();

} catch (SQLException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

}

评论这张

转发至微博

oracle blob 照片,要在oracle里面存入图片 用 blob类型相关推荐

  1. oracle clob 写入mongo,【Oracle】Varchar2/Blob/Clob用法详解

    数据库中提供了三种字段类型Varchar2.Blob和Clob用于存储字符串或二进制数据,其中Varchar2.Clob用于存储字符串数据,而Blob用于存储二进制数据. Varchar2采用单字节存 ...

  2. oracle blob字段索引,在oracle 数据库中使用 Blob 字段存储 一张图片并读取

    1. 进行数据库的设置  create table image_lob(t_id varchar2(5) not null,t_image blob not null); create or repl ...

  3. oracle创建带blob字段的表,ORACLE 还有BLOB及CLOB等类型字段的表的导出导入

    当ORACLE数据库导出的时候,发现有些表有BLOB和CLOB类型字段的时候,利用一般的导出方法是无法导出的会报错,其原因是sql无法生成这两种类型字段,这个时候,最好用的方法就是plsql自带的导出 ...

  4. oracle blob转字符串乱码,oracle数据库字段乱码

    oracle字符乱码问题的解决 今天开发人员说在表字段后添加注释出现乱码,但其他开发人员添加注释无此原因,于是判断是其客户端字符集设置问题. 出现乱码的注释如图 解决方法 1 查看客户端字符集 SQL ...

  5. oracle怎么删除lob对象,Oracle系列:LOB大对象处理

    Oracle系列:LOB大对象处理 Oracle系列:LOB大对象处理 主要是用来存储大量数据的数据库字段,最大可以存储4G字节的非结构化数据. 主要介绍字符类型和二进制文件类型LOB数据的存储,单独 ...

  6. oracle查询大小写敏感参数,让Oracle 大小写敏感 表名 字段名 对像名

    一.解决方案 1.在表名.字段名.对象名上加上双引号,即可实现让oracle大小写区分. 2.但是这又引起了另一个问题:在数据库操作中,sql语句中相应的表名.字段名.对象名上一定要加双引号. 解决办 ...

  7. oracle克隆方式安装,克隆Oracle实现快速安装数据库软件

    <Linux 7安装Oracle 11g打怪经历>完成了数据库软件的初始安装,如果要同步复制到多套相同的环境,选择克隆数据库,是个好的选择. 原始数据库 首先,将数据库软件的$ORACLE ...

  8. oracle asm密码是什么,ORACLE 12C ASM 新特性:共享密码文件

    在ORACLE 12C之前大家都知道密码文件是存放在?/dbs或者?/database中,如果要修改修改sysdba权限的用户密码时候,会去修改密码文件,而在rac数据库的sys密码文件是存在各个节点 ...

  9. oracle failed login count metric,Oracle Life: SQL.PLSQL Archives - 云和恩墨,成就所托!

    一道面试题引出的系列数据库性能,数据安全问题及解决方案 Posted by eygle at 2018-08-27 [内容摘要]请问以下SQL有什么可能的逻辑问题.语法问题.性能问题,可以怎样进行索引 ...

最新文章

  1. HTML 事件属性_03
  2. Android AutoFocusCallback is not being called or not returning
  3. python提示list index out of range_为什么python报错说“list index out of range”
  4. yum安装Docker失败No package docker available
  5. 如何在A用户下建立视图,这个视图是A的表与B的表进行关联的?
  6. 跨域问题解决(我只是搬运工)
  7. c语言推箱子程序设计贴吧,推箱子问题
  8. 不是每个人的一生都会有贵人相助
  9. C# http监听之Nancy.net
  10. [WildPackets.OmniPeek].OmniPeek.4.0.1
  11. Linux 根据服务名字找安装路径
  12. 锐捷linux客户端进路由器,锐捷WLAN无线产品之SSH管理
  13. codeblocks 16.01 汉化包下载地址及方法
  14. 网吧服务器发消息,网吧盗号常见途径总结以及解决办法
  15. Qt创建桌面快捷方式
  16. 数理统计与描述性分析
  17. 注册表 关闭打印机服务器,Win7系统添加打印机无Print Spooler服务无注册表解决方法...
  18. 债务纠纷案被录入终本库了怎么办?
  19. 用python把学习通导出成绩,未完善
  20. ASP.NET:aspx文件

热门文章

  1. Python turtle 绘制有趣的图形
  2. 电商新系统如何应对峰值
  3. PR模板 复古回忆棱镜光效梦幻内容展示PR视频模板
  4. PMP : PMP备考心得 (8)
  5. php 短网址 算法,php生成短网址的思路以及实现方法
  6. mysql connector详解_MySQL Connector 编程
  7. 我把海外抖音TikTok当副业,一周赚了7000块:想给有梦想的人提个醒!
  8. 支持向量机(一)——线性可分支持向量机
  9. isAssignableFrom方法的功能简介说明
  10. .net 服务器推送信息,.net websocket服务端开发,实现消息推送功能