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字符串 | 学步园相关推荐

  1. android 模糊读取文件名_Android 从路径中获取文件名 | 学步园

    转载:http://androidstudy.iteye.com/blog/787560 方法一:利用String类 public String getFileName(String pathandn ...

  2. java properties文件 安全_java 数据库读取工具类(读取config.properties配置文件)[包含线程安全] | 学步园...

    java 数据库读取工具类(读取config.properties配置文件)[包含线程安全] 数据库读取工具类 package com.db; import java.sql.Connection; ...

  3. mysql timestamp 默认_MySQL数据库TIMESTAMP怎么设置默认值 | 学步园

    MySQL数据库TIMESTAMP设置默认值新手技术人员对他感到很陌生,不知道该怎么设置.下面学步园小编来讲解下MySQL数据库TIMESTAMP怎么设置默认值? MySQL数据库TIMESTAMP怎 ...

  4. mysql mediumblob读取_JSP如何读取MySql中MEDIUMBLOB字符串,并显示

    匿名用户 1级 2006-03-18 回答 实现向MYSQL数据库中存储或提取图片文件 一些情况下,需要向数据库中存储一些2进制文件,比如图片文件等,这时候,向数据库存储数据不同于普通的字符串存储,我 ...

  5. jsp mysql电影网站_JSP+Servlet+C3P0+Mysql实现的YCU movies电影网站

    本文存在视频版本,请知悉 项目简介 这次分享一个电影网站,页面炫酷,需要有一定的前端功底.该网站存在一些bug,感兴趣的可以自行改改,也可以私信我. 本系统基于JSP+Servlet+C3P0+Mys ...

  6. mysql日记本程序_JSP+Servlet+JDBC+mysql实现的个人日记本系统

    项目简介 本系统基于JSP+Servlet+Mysql 一个基于JSP+Servlet+Jdbc的个人日记本系统.涉及技术少,易于理解,适合JavaWeb初学者学习使用. 难度等级:入门 技术栈 编辑 ...

  7. mysql sql数值转字符拼接_sql中的字符串拼接

    1. 概述 在SQL语句中经常需要进行字符串拼接,以sqlserver,oracle,mysql三种数据库为例,因为这三种数据库具有代表性. sqlserver: select '123'+'456' ...

  8. mybatis mysql 存储过程_Mysql 存储过程+Mybatis调用实现插入操作例子 | 学步园

    一. 简介:网上关于存储过程的使用有很多的例子,但大多实现的功能比较简单,由于本人对SQL语句还不是很熟悉,更别说存储过程了,所以在实现该例子的时候遇到了很多问题,现在拿给大家来分享. 二. 在本例子 ...

  9. mysql show tables_mysql — show tables的结果不一定准确 | 学步园

    有没有碰到这样的情况: show tables的结果中包含某个表,然而后续的SQL,无论是select还是update,insert都会报错:Table 'xxxx' doesn't existsho ...

最新文章

  1. Ubuntu 11.10 开机让 Varnish 跟随 Nginx 一起启动
  2. 后端:C#操作Mongodb用法笔记
  3. chrome插件网站
  4. java jstack 死锁_利用jstack检测死锁DeadLock
  5. [html] 为什么移动端页面的设计稿一般是750px/640px呢?
  6. 斑马打印机怎么打印二维码_万能打印机厂家是怎么改良打印机的?
  7. springboot下载TXT文件时会将后台返回的成功信息一并返回
  8. Python+Opencv图像处理新手入门教程(二):颜色空间转换,图像大小调整,灰度直方图
  9. 我构建应用的这十年......
  10. 固态和机械硬盘组raid_相同大小的固态硬盘和机械硬盘组RAID1会不会影响固态硬盘的速度?...
  11. 工行网银B2c第三方接口开发
  12. linux下c/c++实例之三只允许单个程序运行
  13. 【软件与系统安全】笔记与期末复习
  14. 2021漳州一中历年高考成绩查询,2021年漳州中考录取分数线,历年漳州各高中录取分数线排名...
  15. 80秒验证13亿个身份证号码,包含省市县验证
  16. 五分钟学后端技术:分布式系统理论 - 从放弃到入门
  17. 3D视觉学习计划之PCL库的基础知识
  18. 计算机科学与技术网上书店,计算机科学与技术毕业论文:基于web的网上书店.doc...
  19. 无线上网卡基础知识及导购
  20. csdn分类专栏使用指南

热门文章

  1. 苹果电脑mp4转换成mp3的免费软件
  2. 攻沙服务器维护,12月19日服务器合服公告
  3. 扎克伯格Meta元宇宙被质疑:年均烧百亿美元,货要等十年
  4. 谷歌翻译浏览器扩展,替换国内服务器版
  5. 如何用图数据库进行人员关系挖掘?
  6. 如何入门微信小程序制作
  7. Ureport2源码修改:增加自定义功能
  8. 网络挣钱之软件推广、设置主页
  9. 前端零基础入门(八):background的妙用_css精灵
  10. Python企业微信群机器人推送消息,定时提醒。