oracle blob 照片,要在oracle里面存入图片 用 blob类型
要在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类型相关推荐
- oracle clob 写入mongo,【Oracle】Varchar2/Blob/Clob用法详解
数据库中提供了三种字段类型Varchar2.Blob和Clob用于存储字符串或二进制数据,其中Varchar2.Clob用于存储字符串数据,而Blob用于存储二进制数据. Varchar2采用单字节存 ...
- oracle blob字段索引,在oracle 数据库中使用 Blob 字段存储 一张图片并读取
1. 进行数据库的设置 create table image_lob(t_id varchar2(5) not null,t_image blob not null); create or repl ...
- oracle创建带blob字段的表,ORACLE 还有BLOB及CLOB等类型字段的表的导出导入
当ORACLE数据库导出的时候,发现有些表有BLOB和CLOB类型字段的时候,利用一般的导出方法是无法导出的会报错,其原因是sql无法生成这两种类型字段,这个时候,最好用的方法就是plsql自带的导出 ...
- oracle blob转字符串乱码,oracle数据库字段乱码
oracle字符乱码问题的解决 今天开发人员说在表字段后添加注释出现乱码,但其他开发人员添加注释无此原因,于是判断是其客户端字符集设置问题. 出现乱码的注释如图 解决方法 1 查看客户端字符集 SQL ...
- oracle怎么删除lob对象,Oracle系列:LOB大对象处理
Oracle系列:LOB大对象处理 Oracle系列:LOB大对象处理 主要是用来存储大量数据的数据库字段,最大可以存储4G字节的非结构化数据. 主要介绍字符类型和二进制文件类型LOB数据的存储,单独 ...
- oracle查询大小写敏感参数,让Oracle 大小写敏感 表名 字段名 对像名
一.解决方案 1.在表名.字段名.对象名上加上双引号,即可实现让oracle大小写区分. 2.但是这又引起了另一个问题:在数据库操作中,sql语句中相应的表名.字段名.对象名上一定要加双引号. 解决办 ...
- oracle克隆方式安装,克隆Oracle实现快速安装数据库软件
<Linux 7安装Oracle 11g打怪经历>完成了数据库软件的初始安装,如果要同步复制到多套相同的环境,选择克隆数据库,是个好的选择. 原始数据库 首先,将数据库软件的$ORACLE ...
- oracle asm密码是什么,ORACLE 12C ASM 新特性:共享密码文件
在ORACLE 12C之前大家都知道密码文件是存放在?/dbs或者?/database中,如果要修改修改sysdba权限的用户密码时候,会去修改密码文件,而在rac数据库的sys密码文件是存在各个节点 ...
- oracle failed login count metric,Oracle Life: SQL.PLSQL Archives - 云和恩墨,成就所托!
一道面试题引出的系列数据库性能,数据安全问题及解决方案 Posted by eygle at 2018-08-27 [内容摘要]请问以下SQL有什么可能的逻辑问题.语法问题.性能问题,可以怎样进行索引 ...
最新文章
- HTML 事件属性_03
- Android AutoFocusCallback is not being called or not returning
- python提示list index out of range_为什么python报错说“list index out of range”
- yum安装Docker失败No package docker available
- 如何在A用户下建立视图,这个视图是A的表与B的表进行关联的?
- 跨域问题解决(我只是搬运工)
- c语言推箱子程序设计贴吧,推箱子问题
- 不是每个人的一生都会有贵人相助
- C# http监听之Nancy.net
- [WildPackets.OmniPeek].OmniPeek.4.0.1
- Linux 根据服务名字找安装路径
- 锐捷linux客户端进路由器,锐捷WLAN无线产品之SSH管理
- codeblocks 16.01 汉化包下载地址及方法
- 网吧服务器发消息,网吧盗号常见途径总结以及解决办法
- Qt创建桌面快捷方式
- 数理统计与描述性分析
- 注册表 关闭打印机服务器,Win7系统添加打印机无Print Spooler服务无注册表解决方法...
- 债务纠纷案被录入终本库了怎么办?
- 用python把学习通导出成绩,未完善
- ASP.NET:aspx文件
热门文章
- Python turtle 绘制有趣的图形
- 电商新系统如何应对峰值
- PR模板 复古回忆棱镜光效梦幻内容展示PR视频模板
- PMP : PMP备考心得 (8)
- php 短网址 算法,php生成短网址的思路以及实现方法
- mysql connector详解_MySQL Connector 编程
- 我把海外抖音TikTok当副业,一周赚了7000块:想给有梦想的人提个醒!
- 支持向量机(一)——线性可分支持向量机
- isAssignableFrom方法的功能简介说明
- .net 服务器推送信息,.net websocket服务端开发,实现消息推送功能