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();

}

}

}

JSP如何读取MySql中MEDIUMBLOB字符串相关推荐

  1. c 读取mysql中mediumblob_「mediumblob」JSP如何读取MySql中MEDIUMBLOB字符串 - seo实验室

    mediumblob JSP如何读取mysql中mediumBLOB字符串,并显示? 实现向MYSQL数据库中存储或提取图片文件 一些情况下,需要向数据库中存储一些2进制文件,比如图片文件等,这时候, ...

  2. mysql mediumblob读取_JSP如何读取MySql中MEDIUMBLOB字符串 | 学步园

    JSP如何读取MySql中MEDIUMBLOB字符串,并显示? 实现向MYSQL数据库中存储或提取图片文件 一些情况下,需要向数据库中存储一些2进制文件,比如图片文件等,这时候,向数据库存储数据不同于 ...

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

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

  4. Spark读取MySQL中的数据为DataFrame

    Spark读取JDBC中的数据(以MySQL为例)为DataFrame,有两种方式. //聚合的时候默认分区是200,可以在此设置 val spark = SparkSession.builder() ...

  5. mysql查找内容某字符串出现的次数_查找MySQL中特定字符串出现的次数?

    使用LENGTH()此.让我们首先创建一个表-mysql> create table DemoTable -> ( -> Value text -> ); 使用插入命令在表中插 ...

  6. Oracle和Mysql中的字符串的拼接

    SQL允许两个或者多个字段之间进行计算,字符串类型的字段也不例外.比如我们需要 以"工号+姓名"的方式在报表中显示一个员工的信息,那么就需要把工号和姓名两个字符 串类型的字段拼接计 ...

  7. mysql中生成字符串对应的英文字母(拼音首字母)

    mysql中生成字符串对应的英文字母(拼音首字母)的存储过程,触发器和函数 1.规则 1.1.输入字符串长度255(可变),输出字符串10(可变) 1.2.对于全英文字母或数字,输出空格后的首字符,均 ...

  8. mysql explode_sql-等效于explode()以在MySQL中使用字符串

    sql-等效于explode()以在MySQL中使用字符串 在MySQL中,当另一个值= opponent2.score时,我希望能够搜索'31 - 7'.在MySQL中用于拆分字符串的语法是什么? ...

  9. java mysql 中文乱码_java读取MySQL中的中文数据显示乱码

    在linux平台(Ubuntu 10.10)上安装MySQL(5.1)和JDK(1.6),然后使用PuTTY远程操作.只将PuTTY的Window -> Translation 中的" ...

最新文章

  1. PHP面向对象编程简单实例
  2. 李飞飞团队给机器人造了一个“模拟厨房”:洗切炒菜一条龙训练!人类还能VR监管 | 开源...
  3. Inversion of Control Containers and the Dependency Injection pattern--Martin Fowler
  4. 【机器视觉】 dev_set_tool_geometry算子
  5. linux salt生成,51CTO博客-专业IT技术博客创作平台-技术成就梦想
  6. 算法-排序-选择排序
  7. 我的LAMP实现过程——apache+php
  8. C#强力粉碎文件代码分享,升级中用到
  9. 实参与形参不兼容怎么解决_上岗证报名照片无法上传非官方解决方案
  10. 常见的几种 RuntimeException
  11. 前台MM手一抖,网络说抖它就抖!
  12. Qt之QToolBox
  13. Linux命令之nl
  14. linux __setup
  15. 算法设计与分析复习——第四章:贪心算法
  16. android时间为什么没有更新了,万年历插件_中华万年历小插件为什么不自己更新日期时间...
  17. 洛谷试炼场---提高历练地2
  18. 实战:第十五章:摸爬滚打这些年的心路历程
  19. “窗体”工具栏控件和“控件工具箱”控件基础
  20. 支付宝|微信|h5|个人收款免签约支付系统源码

热门文章

  1. Hdu 1851 Nim+巴什博弈
  2. 中基鸿业30岁女性的理财之道
  3. erlang-21.3.8.6-1.el7.x86_64.rpm依赖检测失败
  4. 介绍一个制作情侣网站的方法,无需服务器、域名,基于saas和动态地址
  5. VMware Workstation Mac 12 MOBILEME_CREATE_UNAVAILABLE_MAC 问题
  6. 应用层 HTTP 代理服务器转发消息时的相关头部 请求头 X-Forwarded-For
  7. 计算机无法识别机qie硬盘,[转载]《图解教你装配电脑》第四章:硬盘、光驱、软驱如何安装...
  8. 证件照片怎么改底色?证件照背景颜色怎么替换?
  9. android 铃声管理器,android RingtoneManager 铃声管理器
  10. 【linux python 进程】一招教你杀死所有的python进程