使用PreparedStatement向数据表中插入、修改、删除、获取Blob类型的数据
使用PreparedStatement向数据表中插入、修改、删除、获取Blob类型的数据
Blob介绍
BLOB类型的字段用于存储二进制数据
MySQL中,BLOB是个类型系列,包括:TinyBlob、Blob、MediumBlob、LongBlob,这几个类型之间的唯一区别是在存储文件的最大大小上不同。
MySQL的四种BLOB类型
类型 大小(单位:字节)
TinyBlob 最大 255
Blob 最大 65K
MediumBlob 最大 16M
LongBlob 最大 4G
Oracle LOB介绍
内部LOB将数据以字节流的形式存储在数据库的内部。因而,内部LOB的许多操作都可以参与事务,也可以像处理普通数据一样对其进行备份和恢复操作。Oracle支持三种类型的内部LOB:
- BLOB(二进制数据)
- CLOB(单字节字符数据)
- NCLOB(多字节字符数据)。
CLOB和NCLOB类型适用于存储超长的文本数据,BLOB字段适用于存储大量的二进制数据,如图像、视频、音频,文件等。
目前只支持一种外部LOB类型,即BFILE类型。在数据库内,该类型仅存储数据在操作系统中的位置信息,而数据的实体以外部文件的形式存在于操作系统的文件系统中。因而,该类型所表示的数据是只读的,不参与事务。该类型可帮助用户管理大量的由外部程序访问的文件。
;
. io
.*;
. sql
.*;
. text
. SimpleDateFormat
;
. junit
. Test
;
{
//如何获取数据表中的 blob类型的变量
()
{
=
null
;
=
null
;
=
null
;
=
null
;
=
null
;
try
{
= JDBCUtils
. getConnection
();
= "select id,name,email,birth,photo from customers where id=?"
;
= conn
. prepareStatement
( sql
);
.setInt
(1
, 16
);//获取id=16的数据
= ps
. executeQuery
();
if
( rs
. next
()){
= rs
. getInt
( 1
);
= rs
. getString
( 2
);
= rs
. getString
( 3
);
= rs
. getDate
( 4
);
=rs
.getBlob
(5
);
= photo
. getBinaryStream
();//利用输入流来读取数据库中的二进制文件
=
new FileOutputStream
(
new File
( "girl.png"
));//输出到本地
[] buf
=
new byte
[ 100
];
= 0
;
while
(( len
= is
. read
( buf
))!=- 1
){
. write
( buf
, 0
, len
);
}
=
new Customer
( id
, name
, birth
);//将非blob类型封装成对象输出
. out
. println
( cust
);
}
}
catch
( Exception e
)
{
}
finally
{
. close
( rs
, ps
, conn
);//记得要关闭流
if
( fos
!=
null
){
try
{
. close
();
}
catch
( IOException e
)
{
. printStackTrace
();
}
}
if
( is
!=
null
){
try
{
. close
();
}
catch
( IOException e
)
{
. printStackTrace
();
}
}
}
}
// 修改数据表包含图片信息的数据
()
{
=
null
;
=
null
;
=
null
;
try
{
= JDBCUtils
. getConnection
();
= "update customers set photo = ? where id = ?"
;
= conn
. prepareStatement
( sql
);
=
new FileInputStream
(
new File
( "1.png"
));
.setBlob
(1
, fis
);
. setInt
( 2
, 16
);
.execute
();
}
catch
( Exception e
)
{
. printStackTrace
();
}
finally
{
. close
(
null
,
ps
, conn
);
try
{
. close
();
}
catch
( IOException e
)
{
. printStackTrace
();
}
}
}
// 向数据表中插入一条包含图片信息的数据
()
{
=
null
;
=
null
;
=
null
;
try
{
= JDBCUtils
. getConnection
();
= "insert into customers(name,email,birth,photo)values(?,?,?,?)"
;
= conn
. prepareStatement
( sql
);
. setString
( 1
, " zhengqiang "
);
. setString
( 2
, "beipiao@123.com"
);
= "1991-11-13"
;
=
new SimpleDateFormat
( "yyyy-MM-dd"
);
. util
. Date d
= sdf
. parse
( date
);
. setDate
( 3
,
new Date
( d
. getTime
()));
=
new FileInputStream
(
new File
( "66.jpg"
));
. setBlob
( 4
, fis
);
.execute
();
}
catch
( Exception e
)
{
. printStackTrace
();
}
finally
{
. close
(
null
,
ps
, conn
);
try
{
. close
();
}
catch
( IOException e
)
{
. printStackTrace
();
}
}
}
使用PreparedStatement向数据表中插入、修改、删除、获取Blob类型的数据的更多相关文章
- 向Oracle 数据表中插入一条带有日期类型的数据
有一张表:batch(批次表) 表的字段如下: 第一种情况: 现在需要插入一条当前的系统时间 sql 如下: insert into batch (batch_id, cus_id, batch_nu ...
- 向mysql数据表中插入数据失败的原因
1.案例代码: $sql1="insert into content(category,subject,content,username,release_date) values('{$ca ...
- 触发器修改后保存之前的数据 表中插入数据时ID自动增长
create or replace trigger t before update on test5 for each rowbegin insert into test55 values (:old ...
- sql 所有数据表中 插入字段
declare @tablename varchar(200)declare @sql varchar(2000)declare cur_t cursor forselect name from sy ...
- MySQL 向表中插入、删除数据
一.向表中插入一条信息 1.查看表中的数据 mysql> SELECT * FROM user; +----+---------+----------+ | id | account | pas ...
- Mysql如何向存在外键的数据表中插入数据
1.创建表 CREATE TABLE `trn_comment_msg` ( `comMsgId` ) NOT NULL AUTO_INCREMENT COMMENT '评论消息主键', `msgId ...
- mysql 数据表中查找、删除重复记录
为了性能考虑,在阅读之前提醒大家,如果有子查询,子查询查询到的数据最好不要超过总数据量的30%. 查询有重复数据的记录 select * from F group by a,b,c,d having ...
- Yii1 用commandBuilder方法往数据表中插入多条记录
$builder = Yii::app()->db->schema->commandBuilder; // 创建builder对象 $command = $builder->c ...
- MySQL查询数据表中数据记录(包括多表查询)
MySQL查询数据表中数据记录(包括多表查询) 在MySQL中创建数据库的目的是为了使用其中的数据. 使用select查询语句可以从数据库中把数据查询出来. select语句的语法格式如下: sele ...
随机推荐
- Net-Snmp工具(学习SNMP的工具,开源项目)简单使用
https://blog.csdn.net/mrzhangzifu/article/details/77882371 Net-Snmp工具的安装与配置 操作系统:Ubuntu16.4 软件版本:n ...
- Ajax请求的几个小练习
Ajax请求的几个小练习 准备工作 路由中做了分发: re_path('^app01/',include('app01.url')) app01中url.py文件的内容: from django.ur ...
- java基础-反射(细节)
java面试题--java反射机制? Java反射机制的作用:1)在运行时判断任意一个对象所属的类.2)在运行时判断任意一个类所具有的成员变量和方法.3)在运行时任意调用一个对象的方法4)在运行时构造 ...
- 【Servlet】(1)Servlet简介、Servlet底层原理、Servlet实现方式、Servlet生命周期
一.Servlet简介 1.Servlet定义: Servlet(Server Applet)是Java Servlet的简称,是为小服务程序或服务连接器,用Java编写的服务器端程序,主要功能在于交 ...
- gentoo 图像方面的软件
图像方面的软件一般包括:查看图像,屏幕截图,图像修改. 查看图像简单的可以安装 feh,但是 feh 一般作为墙纸来用.稍微好一些的是 gqview. 屏幕截图可以用 screengrab,使用的时候 ...
- spring mvc 自动生成代码
generator mybaits 详细配置: 目录结构 执行命令 OK git:https://gitee.com/xxoo0_297/generator.git
- openStack instance error 恢复
cli command下加载openstack超级管理员权限 重设openStack 虚拟机error实例状态即可 nova reset-state instance-id --active
- QTP 学习 - 参数化
- [Ting's笔记Day6]活用套件carrierwave gem:(1)在Rails实现图片上传功能
carrierwave是一款经典的图片上传套件,本篇的目标是先在本地端(development)的rails项目试成功gem. (预计中集的进度会练习怎么利用Amazone S3架设图片上传Host, ...
- [Ting's笔记Day3]解决Git常见错误non-fast-forward问题
写文章最难的部分,是找题材! 所以最近每次遇到bug或错误都挺兴奋开心(zflwx)的,因为又可以写笔记了 也可以记录新手学习之路上遇到的常见问题,提供其他新手参考. 最近学Udemy平台Ruby学习 ...