赞
踩
场景:前端页面要展现公司、商铺信息,其中包括公司logo、商铺图片。
正常的图片储存要么放进本地磁盘,要么就存进数据库。存入本地很简单,本篇博客记录如何将图片存进mysql数据库,如果要图片存进数据库,要将图片转化成二进制。
1.数据库存储图片的字段类型要为blob二进制大对象类型
2.将图片流转化为二进制 下面放上代码实例
一、数据库
- CREATE TABLE `photo`
- ( `id` int(11) NOT NULL,
- `name` varchar(255) DEFAULT NULL,
- `photo` longblob,
- PRIMARY KEY (`id`)
- ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
备注:
1、记得添加MySQL驱动包
2、`photo`字段类型一定要足够大,不然会报错
二、数据库链接
- import java.sql.Connection;
- import java.sql.DriverManager;
- import java.sql.SQLException;
-
- /**
- * @author Allen
- *
- */
- public class DBUtil {
- // 定义数据库连接参数
- public static final String DRIVER_CLASS_NAME = "com.mysql.jdbc.Driver";
- public static final String URL = "jdbc:mysql://10.x.x.x:3306/test";
- public static final String USERNAME = "root";
- public static final String PASSWORD = "123456";
-
- // 注册数据库驱动
- static {
- try {
- Class.forName(DRIVER_CLASS_NAME);
- } catch (ClassNotFoundException e) {
- System.out.println("注册失败!");
- e.printStackTrace();
- }
- }
-
- // 获取连接
- public static Connection getConn() throws SQLException {
- return DriverManager.getConnection(URL, USERNAME, PASSWORD);
- }
-
- // 关闭连接
- public static void closeConn(Connection conn) {
- if (null != conn) {
- try {
- conn.close();
- } catch (SQLException e) {
- System.out.println("关闭连接失败!");
- e.printStackTrace();
- }
- }
- }
- //测试
- public static void main(String[] args) throws SQLException {
- System.out.println(DBUtil.getConn());
- }
-
- }
三、图片流
- import java.io.File;
- import java.io.FileInputStream;
- import java.io.FileOutputStream;
- import java.io.IOException;
- import java.io.InputStream;
-
- /**
- * @author Allen
- *
- */
- public class ImageUtil
- {
-
- // 读取本地图片获取输入流
- public static FileInputStream readImage(String path) throws IOException
- {
- return new FileInputStream(new File(path));
- }
-
- // 读取表中图片获取输出流
- public static void readBin2Image(InputStream in, String targetPath)
- {
- File file = new File(targetPath);
- String path = targetPath.substring(0, targetPath.lastIndexOf("/"));
- if (!file.exists())
- {
- new File(path).mkdir();
- }
- FileOutputStream fos = null;
- try
- {
- fos = new FileOutputStream(file);
- int len = 0;
- byte[] buf = new byte[1024];
- while ((len = in.read(buf)) != -1)
- {
- fos.write(buf, 0, len);
- }
- fos.flush();
- }
- catch (Exception e)
- {
- e.printStackTrace();
- }
- finally
- {
- if (null != fos)
- {
- try
- {
- fos.close();
- }
- catch (IOException e)
- {
- e.printStackTrace();
- }
- }
- }
- }
- }
四、转码存储
- import java.io.FileInputStream;
- import java.io.InputStream;
- import java.sql.Connection;
- import java.sql.PreparedStatement;
- import java.sql.ResultSet;
- import java.sql.SQLException;
-
- /**
- * @author Allen 测试写入数据库以及从数据库中读取
- */
- public class ImageDemo
- {
- // 将图片插入数据库
- public static void readImage2DB()
- {
- String path = "G:/PPP/20221014173640.jpg";
- Connection conn = null;
- PreparedStatement ps = null;
- FileInputStream in = null;
- try
- {
- in = ImageUtil.readImage(path);
- conn = DBUtil.getConn();
- String sql = "insert into photo (id,name,photo)values(?,?,?)";
- ps = conn.prepareStatement(sql);
- ps.setInt(1, 1);
- ps.setString(2, "Tom");
- ps.setBinaryStream(3, in, in.available());
- int count = ps.executeUpdate();
- if (count > 0)
- {
- System.out.println("插入成功!");
- }
- else
- {
- System.out.println("插入失败!");
- }
- }
- catch (Exception e)
- {
- e.printStackTrace();
- }
- finally
- {
- DBUtil.closeConn(conn);
- if (null != ps)
- {
- try
- {
- ps.close();
- }
- catch (SQLException e)
- {
- e.printStackTrace();
- }
- }
- }
-
- }
-
- // 读取数据库中图片
- public static void readDB2Image()
- {
- String targetPath = "G:/demo.jpg";
- Connection conn = null;
- PreparedStatement ps = null;
- ResultSet rs = null;
- try
- {
- conn = DBUtil.getConn();
- String sql = "select * from photo where id =?";
- ps = conn.prepareStatement(sql);
- ps.setInt(1, 1);
- rs = ps.executeQuery();
- while (rs.next())
- {
- InputStream in = rs.getBinaryStream("photo");
- ImageUtil.readBin2Image(in, targetPath);
- }
- }
- catch (Exception e)
- {
- e.printStackTrace();
- }
- finally
- {
- DBUtil.closeConn(conn);
- if (rs != null)
- {
- try
- {
- rs.close();
- }
- catch (SQLException e)
- {
- e.printStackTrace();
- }
- }
- if (ps != null)
- {
- try
- {
- ps.close();
- }
- catch (SQLException e)
- {
- e.printStackTrace();
- }
- }
-
- }
- }
-
- //测试
- public static void main(String[] args)
- {
- /*
- 备注:先执行readImage2DB();
- 后执行readDB2Image();
- */
- readImage2DB(); //图片插入数据库方法
- //readDB2Image(); //读取数据库图片到指定位置
- }
- }
五、结果展现
我这里使用的数据库工具是:DBeaver
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。