本文使用mysql数据库举例插入图片到数据库和从数据库取出图片在页面显示:

一、建表

创建一个测试保存图片的表

create table t_save_img(

name varchar(200),   文件名称

img  longblob ,

primary key(name)

)

二、建实体类:SaveImageInfo

private String name; //文件名称

private byte[] bt; //字节数组

三、数据源配置

db.properties文件

test.driver=com.mysql.jdbc.Driver

test.url=jdbc:mysql://127.0.0.1:3306/dg?CharacterEncoding=GBK

test.user=root

test.password=root

四、数据库连接的工具类

package com.test.util;

import java.io.InputStream;

import java.sql.Connection;

import java.sql.DriverManager;

import java.sql.PreparedStatement;

import java.sql.ResultSet;

import java.sql.SQLException;

import java.util.Properties;

/**

*

*@类功能说明:获取数据库连接和释放数据库连接的工具类

*@修改人员名: yang

*@修改日期:    2015-11-28 下午03:48:11

*@修改内容:

*@修改次数:

*@创建时间:    2015-11-28 下午03:48:11

*@版本:V1.0

*/

public class JdbcUtil {

private static Properties prop=new Properties();

private  final static ThreadLocal tdl=new ThreadLocal();

//静态代码块,保证得到的连接是唯一的

static{

try {

InputStream is=JdbcUtil.class.getResourceAsStream("/db/db.properties");

prop.load(is);

Class.forName(prop.getProperty("test.driver"));

} catch (Exception e) {

throw new RuntimeException(e);

}

}

//获取连接

public Connection getConn() throws Exception{

Connection conn=null;

try {

//获得当前数据库连接线程

conn=tdl.get();

conn=DriverManager.getConnection(prop.getProperty("test.url"),

prop.getProperty("test.user"), prop.getProperty("test.password"));

tdl.set(conn);

} catch (SQLException e) {

throw new RuntimeException(e);

}

return conn;

}

//释放连接

public void releaseConn(Connection conn,PreparedStatement pstm,ResultSet rs)throws Exception{

try{

if(conn!=null){

tdl.remove();

conn.close();

}

if(pstm!=null){

pstm.close();

}

if(rs!=null){

rs.close();

}

}catch(Exception e){

throw new RuntimeException(e);

}

}

}

五、开始实现保存图片和显示图片

DAO的代码如下:

package com.test.dao;

import java.io.BufferedInputStream;

import java.sql.Blob;

import java.sql.Connection;

import java.sql.PreparedStatement;

import java.sql.ResultSet;

import com.test.util.JdbcUtil;

/**

*

*@类功能说明:保存图片到数据库的实现类

*@修改人员名: yang

*@修改日期:    2015-11-28 下午04:28:07

*@修改内容:

*@修改次数:

*@创建时间:    2015-11-28 下午04:28:07

*@版本:V1.0

*/

public class ISaveImageToDataDAOImpl {

//添加图片

public void insertImageInfo(String name,byte[] img)throws Exception{

Connection conn=null;

PreparedStatement pstm=null;

JdbcUtil jdbc=null;

StringBuffer sb=null;

try{

sb=new StringBuffer();

jdbc=new JdbcUtil();

conn=jdbc.getConn();

StringBuffer sql=sb.append("insert into t_save_img values(?,?) ");

pstm=conn.prepareStatement(sql.toString());

pstm.setString(1, name);

pstm.setBytes(2, img); //以字节数组的形式写入

pstm.executeUpdate();

}catch(Exception e){

throw new RuntimeException(e);

}finally{

jdbc.releaseConn(null, pstm, null);

}

}

//获取图片

public BufferedInputStream selectOneImage(String name)throws Exception{

BufferedInputStream bufferImage=null;

Connection conn=null;

PreparedStatement pstm=null;

ResultSet rs=null;

JdbcUtil jdbc=null;

StringBuffer sb=null;

try{

sb=new StringBuffer();

jdbc=new JdbcUtil();

conn=jdbc.getConn();

StringBuffer sql=sb.append("select name,img from t_save_img where name=?  ");

pstm=conn.prepareStatement(sql.toString());

pstm.setString(1, name);

rs=pstm.executeQuery();

while(rs.next()){

//必须强制类型转换

Blob blob=(Blob)rs.getBlob("img");

bufferImage=new BufferedInputStream(blob.getBinaryStream());

}

}catch(Exception e){

throw new RuntimeException(e);

}finally{

jdbc.releaseConn(null, pstm, null);

}

return bufferImage;

}

}

service代码

package com.test.service;

import java.io.BufferedInputStream;

import java.io.File;

import java.io.FileInputStream;

import java.nio.ByteBuffer;

import java.sql.Connection;

import java.sql.SQLException;

import com.test.dao.ISaveImageToDataDAOImpl;

import com.test.util.JdbcUtil;

public class ISaveImageServiceImpl {

private ISaveImageToDataDAOImpl saveImageDAO=new ISaveImageToDataDAOImpl();

public void saveImage(String name,String imgPath) throws Exception{

Connection conn=null;

JdbcUtil jdbc=null;

byte []img=null;

try{

jdbc=new JdbcUtil();

conn=jdbc.getConn();

conn.setAutoCommit(false);

File file=new File(imgPath);

//读入内存

FileInputStream  fis=new FileInputStream(file);

//建立缓冲区

ByteBuffer  bbf=ByteBuffer.allocate((int)file.length());

byte[]array=new byte[1024];

int length=0;

//开始读取和存放数据

while((length=fis.read(array))>0){

if(length!=1024){

bbf.put(array,0,length);

}else{

bbf.put(array);

}

}

//关闭输入流

fis.close();

//获取需要写的内容

img=bbf.array();

saveImageDAO.insertImageInfo(name, img);

conn.commit();

}catch(Exception e){

try {

conn.rollback();

} catch (SQLException e1) {

throw new RuntimeException(e1);

}

throw new RuntimeException(e);

}finally{

jdbc.releaseConn(conn, null, null);

}

}

public BufferedInputStream getImage(String imgName)throws Exception{

Connection conn=null;

JdbcUtil jdbc=null;

BufferedInputStream bg=null;

try{

jdbc=new JdbcUtil();

conn=jdbc.getConn();

conn.setAutoCommit(false);

//获取缓冲流

bg=saveImageDAO.selectOneImage(imgName);

conn.commit();

}catch(Exception e){

try {

conn.rollback();

} catch (SQLException e1) {

throw new RuntimeException(e1);

}

throw new RuntimeException(e);

}finally{

jdbc.releaseConn(conn, null, null);

}

return bg;

}

}

action获取图片的代码

package com.test.action.img;

import java.awt.image.BufferedImage;

import java.io.BufferedInputStream;

import java.io.IOException;

import javax.imageio.ImageIO;

import javax.servlet.ServletException;

import javax.servlet.ServletOutputStream;

import javax.servlet.http.HttpServlet;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

import com.sun.image.codec.jpeg.JPEGCodec;

import com.sun.image.codec.jpeg.JPEGImageEncoder;

import com.test.service.ISaveImageServiceImpl;

/**

*

*@类功能说明:获取数据库图片,并且显示

*@修改人员名: yang

*@修改日期:    2015-11-29 上午10:29:26

*@修改内容:

*@修改次数:

*@创建时间:    2015-11-29 上午10:29:26

*@版本:V1.0

*/

@SuppressWarnings("serial")

public class ShowImgAction extends HttpServlet {

public void service(HttpServletRequest request, HttpServletResponse response)

throws IOException, ServletException {

ISaveImageServiceImpl iis=new ISaveImageServiceImpl();

BufferedInputStream bis=null;

BufferedImage image = null;

try{

//获取service中返回的缓冲流

bis=iis.getImage("da");

image=ImageIO.read(bis);

//写给客户端,只能是静态图片jpg,png格式,不可为gif格式

ServletOutputStream sos = response.getOutputStream();

JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(sos);

encoder.encode(image);

bis.close();

}catch(Exception e){

e.printStackTrace();

}

}

}

web.xml文件配置

index.jsp

ShowImgAction

com.test.action.img.ShowImgAction

ShowImgAction

/showImg

jsp显示图片

String path = request.getContextPath();

String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";

%>

显示数据库的图片

图片:

java图片保存文件到数据库_java保存图片内容到数据库相关推荐

  1. java图片和视频上传_Java实现视频网站的视频上传、视频转码、视频关键帧抽图, 及视频播放功能(转)...

    视频网站中提供的在线视频播放功能,播放的都是FLV格式的文件,它是Flash动画文件,可通过Flash制作的播放器来播放该文件.项目中用制作的player.swf播放器. 多媒体视频处理工具FFmpe ...

  2. word文档保存文件时出错_保存时如何自动创建Word文档的备份副本

    word文档保存文件时出错 Backing up your documents is always a good thing to do, but not always something we re ...

  3. java获取excel文件第一行_java - 在Java中读取Excel文件,但第一行除外 - 堆栈内存溢出...

    我正在尝试从使用xlsx文件的JasperReport模板自动创建报告,我用来从excel文件读取的方法是这样的: String[] columnNames = new String[]{" ...

  4. 超过20G的文件怎么保存_金山文档怎么保存文件-金山文档保存文件的方法

    金山文档是一款功能十分强大的文档创作软件,该软件界面简单直观,可以实时协作编辑,支持Word.PDF.Excel等格式的文件编辑,是一款十分好用的电脑办公软件.无论使用什么办公软件编辑文档,一般情况下 ...

  5. java图片和视频上传_java实现上传和读取图片(视频)

    0 背景 实现从前端上传图片(或视频),后端保存在指定目录下:再从前端读取文件,进行显示. 1 上传代码实现 1.1 html 1.2 ts // 上传附件 handleChange(info: { ...

  6. java高效复制文件并移动_Java 7:复制和移动文件和目录

    java高效复制文件并移动 这篇文章是我对Java 7 java.nio.file软件包的系列文章的继续,这次涵盖了文件的复制和移动以及完整的目录树. 如果您曾经对Java缺少copy和move方法感 ...

  7. java 上传文件到服务器_java上传文件到OSS云服务器(二)

    上篇文章中已经把接口端和service业务层写了,这次就把OSS上传文件的工具类补上. 一.首先配置好OSS服务器各项节点,这是在springboot中appliaction.yml配置文件中的写法. ...

  8. java 调用 swf 文件上传_java SpringMvc 实现文件在线预览(openoffice+swftools+flexpaper)

    项目需求:服务器接受的文件当下只能下载之后才能浏览内容,现需要后台能在线浏览到文件内容,避免繁琐无用文件下载操作. 通过几天网上资料搜索,目前免费的在线预览开发技术使用最多还是(openoffice+ ...

  9. java中打开文件怎么实现_Java如何在程序中打开文件?

    有时需要在java程序中打开一个文件.java.awt.Desktop可用于在java中打开文件.Desktop实现依赖于平台,因此首先,应该检查操作系统是否支持Desktop类.此类查找注册到当前平 ...

  10. java 判断一个文件是否存在_java判断某个文件是否存在的方法

    java判断某个文件是否存在的方法 发布时间:2020-06-25 17:09:42 来源:亿速云 阅读:119 作者:Leah 这篇文章运用简单易懂的例子给大家介绍java判断某个文件是否存在的方法 ...

最新文章

  1. excel公式不自动计算_c++通用面积计算公式_excel 公式计算 c++
  2. 【opencv】边缘高斯模糊(canny+dilate+GaussianBlur)Python实现
  3. RabbitMQ指南(中)
  4. 基于HMM的中文分词
  5. python模拟ajax请求_短信炸弹—用Python模拟ajax请求
  6. 转为字符数组_数组的20种常用的方法?
  7. Qt5制作icon图标文件和发布程序简易介绍
  8. 插入排序 - python实现
  9. WPF 媒体播放器(MediaElement)使用实例(转)
  10. 云免等候服务器响应,云服务器响应
  11. 马尔科夫决策过程(MDP) : BlackJack (MC-Off Policy)
  12. Android n multi-window多窗口支持
  13. 单片机原理与应用技术(一)———51单片机延时汇编语言
  14. 第十届泰迪杯数据挖掘B题电力系统负荷预测分析
  15. CSS命名规范 BEM 颜色 【全局】
  16. QT 多线程异步获取htpp信息 网络通信
  17. notepad++下载安装步骤
  18. H3C服务器web怎么修改密码,h3c路由器怎么修改密码_h3c路由器找回密码
  19. 未越狱设备 安装ipa
  20. shiro基本使用和完成登录

热门文章

  1. 126邮箱发送邮件含超链接
  2. 调用雅虎API获取全球天气
  3. unity按钮控制动画
  4. 新媒体短视频运营门槛高吗
  5. 十个常用网络密码的安全保护措施
  6. oculus rift价格是多少 oculus rift分辨率怎么样
  7. Day_11 传智健康项目-图形报表、POI报表
  8. Brocade博科交换机license软件
  9. 更新缓存的正确姿势(先更新缓存还是先更新数据库)
  10. linux暂停一个在运行中的进程