开发过程中,有时候会用到用mysql存储image图片,今天螃蟹就详细分析一下这一过程。
需求描述
1、将指定目录下或指定的路径文件存储到mylsq数据库中
2、读该取数据库中的数据,将存储的图片文件读取并存储到指定目录下
需求分析
1、图片的内容以二进制流的形成存到mysql的blob字段中
2、获取输出流,生成图片,并且要检查从数据库读取的图片是否可以正常使用
数据库表设计及数据初始化
如下图,我们创建一张表itxxzImg,包含以下字段信息
然后插入测试数据,如以下代码,需要注意的就是存储二进制流需要用ps.setBinaryStream(...)方法,并且第三个参数为int类型,而file.length()为long类型,需求进行一下转换,这个在高版本的mysql驱动中应该得到了解决。
- public static void insert() {
- try {
- for (int i = 0; i < filePath.length; i++) {
- File file = new File(filePath[i]);
- if (!file.exists()) {
- continue;
- }
- ps = getConnection().prepareStatement(INSERT_SQL);
- ps.setInt(1, 0);
- ps.setString(2, file.getName());
- ps.setBinaryStream(3, new FileInputStream(file), (int) file.length());
- ps.setLong(4, file.length());
- ps.executeUpdate();
- }
- } catch (SQLException e) {
- e.printStackTrace();
- } catch (FileNotFoundException e) {
- e.printStackTrace();
- }
- }
初始化后,数据如下:
剩余的工作就比较简单了,读取数据库中的content内容,IO流读取即可
完整代码
- package com.itxxz.db;
- import java.io.File;
- import java.io.FileInputStream;
- import java.io.FileNotFoundException;
- import java.io.FileOutputStream;
- import java.io.IOException;
- 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.sql.Statement;
- /**
- *
- * @author IT学习者-螃蟹
- * @date 2015-1-14
- * @url www.itxxz.com
- *
- */
- public class ItxxzTest {
- /**数据库执行语句*/
- private static final String SELECT_SQL = "SELECT ID ,NAME,CONTENT,FILE_SIZE FROM ITXXZIMG";
- private static final String INSERT_SQL = "INSERT INTO ITXXZIMG( ID ,NAME,CONTENT,FILE_SIZE) VALUES(?,?,?,?)";
- /** 数据库链接配置 */
- // 驱动路径
- private static final String driver = "com.mysql.jdbc.Driver";
- // 用户
- private static final String userName = "root";
- // 密码
- private static final String passwrod = "root";
- // 链接地址
- private static final String url = "jdbc:mysql://localhost:3306/itxxz";
- /** 数据库操作类 */
- private static Connection conn = null;
- private static PreparedStatement ps = null;
- private static ResultSet rs = null;
- private static Statement stmt = null;
- // 初始化参数
- private static final String[] filePath = { "E:/itxxz/logo.png",
- "E:/itxxz/banner.jpg", "E:/itxxz/ad.png" };
- private static final byte[] Buffer = new byte[1024];
- private static final String filedir = "E:/itxxz/img/";
- private static FileOutputStream fos;
- public static void main(String[] args) {
- //insert();
- selectAndExport();
- }
- /**
- * 创建链接
- */
- public static Connection getConnection() {
- try {
- Class.forName(driver);
- conn = DriverManager.getConnection(url, userName, passwrod);
- } catch (ClassNotFoundException e) {
- System.err.println(e.getMessage());
- } catch (SQLException e) {
- System.err.println(e.getMessage());
- }
- return conn;
- }
- /**
- * 新增
- */
- public static void insert() {
- try {
- for (int i = 0; i < filePath.length; i++) {
- File file = new File(filePath[i]);
- if (!file.exists()) {
- continue;
- }
- ps = getConnection().prepareStatement(INSERT_SQL);
- ps.setInt(1, 0);
- ps.setString(2, file.getName());
- ps.setBinaryStream(3, new FileInputStream(file), (int) file.length());
- ps.setLong(4, file.length());
- ps.executeUpdate();
- }
- } catch (SQLException e) {
- e.printStackTrace();
- } catch (FileNotFoundException e) {
- e.printStackTrace();
- }
- }
- /**
- * 查询并导出
- */
- public static void selectAndExport() {
- try {
- PreparedStatement pst = getConnection().prepareStatement(SELECT_SQL);
- rs = pst.executeQuery();
- // 循环记录集,查看每一行每一列的记录
- while (rs.next()) {
- String fileName = rs.getString("name");
- InputStream is = rs.getBinaryStream("content");
- exportImg(is, fileName);
- }
- } catch (SQLException e) {
- e.printStackTrace();
- }
- }
- /**
- * 关闭
- */
- public static void close() {
- try {
- // 关闭记录集
- if (rs != null) {
- rs.close();
- }
- if (ps != null) {
- ps.close();
- }
- if (stmt != null) {
- stmt.close();
- }
- if (conn != null) {
- conn.close();
- }
- } catch (SQLException e) {
- System.err.println(e.getErrorCode());
- }
- }
- /**
- * 导出数据库中二进制流图片
- */
- public static void exportImg(InputStream is, String fileName) {
- File dir = new File(filedir);
- if (!dir.exists()) {
- dir.mkdirs();
- }
- try {
- File file = new File(filedir+fileName);
- if(!file.exists()){
- file.createNewFile();
- }
- fos = new FileOutputStream(file);
- int size = 0;
- while ((size = is.read(Buffer)) != -1) {
- fos.write(Buffer, 0, size);
- }
- } catch (IOException e) {
- e.printStackTrace();
- }
- }
- }
相关推荐
Mysql使用的简单示例
简单的一个c#语言连接mysql数据库存储图片的示例。
MySQL存储图片读取图片
C#_MySQL_图片的存储与读取
主要介绍了Java实现用Mysql存取图片操作实例,本文讲解了使用BLOB类型保存和读取图片的代码实例,需要的朋友可以参考下
本例中使用Python语言,基于Pymysql包,对图片进行存取操作
php+mysql实现数据库图片的存储及显示,使用二进制方法实现图片的保存
用C++ connector实现mysql以二进制格式将图片存储到数据库以及从数据库获取图片并显示,亲测通过,请放心使用,如有问题可留言给我。
语言Java,数据库mysql 批量获取Blob图片下载到本地,同时设置本地保存位置
支持将图片保存到数据库中,并展示在界面上,代码可用
本地图片使用二进制流存储到MySQL中,然后响应前端的传参,查询后可以显示在HEML网页中,相当于图片的简单上传和显示
视频上传和编辑:用户可以轻松上传和编辑视频,通常可以在应用程序或平台上选择从设备或云存储中上传视频。此外,还提供视频编辑工具,如裁剪、滤镜、字幕等,以帮助用户创建高质量的视频内容。 观看和分享:用户...
基于ADO.NET的Windows应用程序,实现将图片存入并取出SQL Server数据库!
使用MySQL存储歌曲链接和图片链接 使用cookies存储用户id等 使用阿里云OSS存储歌曲的大部分mp3文件 主要分为六个模块 用户管理模块:用户登录、用户注册、修改密码 榜单列表模块:动态地从数据库中获取歌曲的链接和...
经过2天研究。自己结合多个例子编写的VC++ 操控MYSQL的增删改查例子。还有一个图片的存储和读取。希望对你有帮助
使用MySQL存储歌曲链接和图片链接 使用cookies存储用户id等 使用阿里云OSS存储歌曲的大部分mp3文件 主要分为六个模块 用户管理模块:用户登录、用户注册、修改密码 榜单列表模块:动态地从数据库中获取歌曲的链接和...
该系统采用了SSM(Spring+SpringMVC+MyBatis)框架作为后端开发技术,使用MySQL数据库进行数据存储和管理。 该系统的主要目标是帮助用户获取关于花卉养殖的知识、技巧和经验,并提供养殖过程中的问题解决方案和指导...
这些工具帮助爬虫定位和提取目标数据,如文本、图片、链接等。 数据存储: 爬虫将提取的数据存储到数据库、文件或其他存储介质中,以备后续分析或展示。常用的存储形式包括关系型数据库、NoSQL数据库、JSON文件等。...
MySQL支持多种存储引擎,如InnoDB、MyISAM、MEMORY等,每种引擎都有特定的优势和适用场景。例如,InnoDB提供事务安全、行级锁定和外键约束,适合处理高并发事务性的应用;MyISAM则更侧重于读取密集型操作,提供全文...
--图片 uPhoto blob, --日期 uBirthday datetime ); 8、 子查询建表方法 部分列名匹配模式: create table userInfo ( name varchar(20), sex char ) as select name, sex from user; 上面的列名和子查询的列名...