mysql mediumblob读取_JSP如何读取MySql中MEDIUMBLOB字符串 | 学步园
JSP如何读取MySql中MEDIUMBLOB字符串,并显示?
实现向MYSQL数据库中存储或提取图片文件
一些情况下,需要向数据库中存储一些2进制文件,比如图片文件等,这时候,向数据库存储数据不同于普通的字符串存储,我们需要对这个2进制文件使用JAVA处理2进制流的API进行处理,然后再进行存储。我们需要进行以下步骤来实现:
向数据库中存储文件的时候,一样使用标准SQL语句,如: insert into database (column1, column2,..)
values(v1,v2,…);注意的是,要在建立存放2进制文件的TABLE时,存放的字段要使用BLOB类型,而不是普通的VARCHAR等。
BLOB是专门存储2进制文件的类型,他还有大小之分,比如mediablob,logblob等,以存储大小不同的2进制文件,一般的图形文件使用
mediablob足以了。
1 见以下代码实现向MYSQL中储存图片文件:
…………………………
private final String insertquery = "insert into employeephoto
(Employee_ID,Binary_Photo,LastMod,Created) values (?,?, NOW(), NOW())";
public void doInsertStaffPic(String loginname,String source_URL) {
Connection conn = null;
PreparedStatement pre = null;
try {
// 进行数据库连接,这里我使用的是在STRUTS中配置的连接池,当然也可// 以自己通过JDBC直接连
conn = DBProcess.getConnection();
//从图片源中获得图片对象并写到缓存中
Image image = new ImageIcon(source_URL).getImage();
BufferedImage bImage = new BufferedImage(image.getWidth(null),
image.getHeight(null), BufferedImage.TYPE_INT_RGB);
Graphics bg = bImage.getGraphics();
bg.drawImage(image, 0, 0, null);
bg.dispose();
//将图片写入2进制的输出流 并放如到byte[] buf中
ByteArrayOutputStream out = new ByteArrayOutputStream();
ImageIO.write(bImage, "jpg", out);
byte[] buf = out.toByteArray();
//获得这个输出流并将他设置到BLOB中
ByteArrayInputStream inStream = new ByteArrayInputStream(buf);
pre = conn.prepareStatement(insertstaffpicquery);
pre.setString(1, loginname);
pre.setBinaryStream(2, inStream, inStream.available());
// 执行写如数据
pre.executeUpdate();
} catch (Exception exc) {
exc.printStackTrace();
}
finally {
try {
pre.close();
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
2 下代码实现从MYSQL中获取图片文件并写入本地文件系统:
…………………………
private final String writeoutquery = "insert into employeephoto
(Employee_ID,Binary_Photo,LastMod,Created) values (?,?, NOW(), NOW())";
// retrive the picture data from database and write it to the local disk
public void doGetAndShowStaffPic(String loginname, String dir) {
FileOutputStream output = null;
InputStream input = null;
Connection conn = null;
ResultSet rs = null;
PreparedStatement pre = null;
try {
conn = DBProcess.getConnection();
pre = conn.prepareStatement(writeoutquery);
pre.setString(1, loginname);
rs = pre.executeQuery();
if (rs.next()) {
// 从数据库获得2进制文件数据
Blob image = rs.getBlob("Binary_Photo");
// setup the streams
Input = image.getBinaryStream();
try {
// 设置写出路径。
output = new FileOutputStream(dir);
} catch (FileNotFoundException e1) {
e1.printStackTrace();
}
// set read buffer size 注意不要设置的太小,要是太小,图片可能不完整
byte[] rb = new byte[1024000];
int ch = 0;
// process blob
try {
// 写入本地文件系统
while ((ch = input.read(rb)) != -1) {
output.write(rb, 0, ch);
}
} catch (IOException e) {
e.printStackTrace();
}
try {
input.close();
} catch (IOException e) {
e.printStackTrace();
}
try {
output.close();
} catch (IOException e) {
e.printStackTrace();
}
}
} catch (SQLException e) {
e.printStackTrace();
}
finally {
try {
rs.close();
pre.close();
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
mysql mediumblob读取_JSP如何读取MySql中MEDIUMBLOB字符串 | 学步园相关推荐
- android 模糊读取文件名_Android 从路径中获取文件名 | 学步园
转载:http://androidstudy.iteye.com/blog/787560 方法一:利用String类 public String getFileName(String pathandn ...
- java properties文件 安全_java 数据库读取工具类(读取config.properties配置文件)[包含线程安全] | 学步园...
java 数据库读取工具类(读取config.properties配置文件)[包含线程安全] 数据库读取工具类 package com.db; import java.sql.Connection; ...
- mysql timestamp 默认_MySQL数据库TIMESTAMP怎么设置默认值 | 学步园
MySQL数据库TIMESTAMP设置默认值新手技术人员对他感到很陌生,不知道该怎么设置.下面学步园小编来讲解下MySQL数据库TIMESTAMP怎么设置默认值? MySQL数据库TIMESTAMP怎 ...
- mysql mediumblob读取_JSP如何读取MySql中MEDIUMBLOB字符串,并显示
匿名用户 1级 2006-03-18 回答 实现向MYSQL数据库中存储或提取图片文件 一些情况下,需要向数据库中存储一些2进制文件,比如图片文件等,这时候,向数据库存储数据不同于普通的字符串存储,我 ...
- jsp mysql电影网站_JSP+Servlet+C3P0+Mysql实现的YCU movies电影网站
本文存在视频版本,请知悉 项目简介 这次分享一个电影网站,页面炫酷,需要有一定的前端功底.该网站存在一些bug,感兴趣的可以自行改改,也可以私信我. 本系统基于JSP+Servlet+C3P0+Mys ...
- mysql日记本程序_JSP+Servlet+JDBC+mysql实现的个人日记本系统
项目简介 本系统基于JSP+Servlet+Mysql 一个基于JSP+Servlet+Jdbc的个人日记本系统.涉及技术少,易于理解,适合JavaWeb初学者学习使用. 难度等级:入门 技术栈 编辑 ...
- mysql sql数值转字符拼接_sql中的字符串拼接
1. 概述 在SQL语句中经常需要进行字符串拼接,以sqlserver,oracle,mysql三种数据库为例,因为这三种数据库具有代表性. sqlserver: select '123'+'456' ...
- mybatis mysql 存储过程_Mysql 存储过程+Mybatis调用实现插入操作例子 | 学步园
一. 简介:网上关于存储过程的使用有很多的例子,但大多实现的功能比较简单,由于本人对SQL语句还不是很熟悉,更别说存储过程了,所以在实现该例子的时候遇到了很多问题,现在拿给大家来分享. 二. 在本例子 ...
- mysql show tables_mysql — show tables的结果不一定准确 | 学步园
有没有碰到这样的情况: show tables的结果中包含某个表,然而后续的SQL,无论是select还是update,insert都会报错:Table 'xxxx' doesn't existsho ...
最新文章
- Ubuntu 11.10 开机让 Varnish 跟随 Nginx 一起启动
- 后端:C#操作Mongodb用法笔记
- chrome插件网站
- java jstack 死锁_利用jstack检测死锁DeadLock
- [html] 为什么移动端页面的设计稿一般是750px/640px呢?
- 斑马打印机怎么打印二维码_万能打印机厂家是怎么改良打印机的?
- springboot下载TXT文件时会将后台返回的成功信息一并返回
- Python+Opencv图像处理新手入门教程(二):颜色空间转换,图像大小调整,灰度直方图
- 我构建应用的这十年......
- 固态和机械硬盘组raid_相同大小的固态硬盘和机械硬盘组RAID1会不会影响固态硬盘的速度?...
- 工行网银B2c第三方接口开发
- linux下c/c++实例之三只允许单个程序运行
- 【软件与系统安全】笔记与期末复习
- 2021漳州一中历年高考成绩查询,2021年漳州中考录取分数线,历年漳州各高中录取分数线排名...
- 80秒验证13亿个身份证号码,包含省市县验证
- 五分钟学后端技术:分布式系统理论 - 从放弃到入门
- 3D视觉学习计划之PCL库的基础知识
- 计算机科学与技术网上书店,计算机科学与技术毕业论文:基于web的网上书店.doc...
- 无线上网卡基础知识及导购
- csdn分类专栏使用指南