`

mysql5存储图片和读取

    博客分类:
  • java
阅读更多

 

开发过程中,有时候会用到用mysql存储image图片,今天螃蟹就详细分析一下这一过程。

需求描述



1、将指定目录下或指定的路径文件存储到mylsq数据库中

2、读该取数据库中的数据,将存储的图片文件读取并存储到指定目录下



需求分析



1、图片的内容以二进制流的形成存到mysql的blob字段中

2、获取输出流,生成图片,并且要检查从数据库读取的图片是否可以正常使用


数据库表设计及数据初始化



如下图,我们创建一张表itxxzImg,包含以下字段信息



然后插入测试数据,如以下代码,需要注意的就是存储二进制流需要用ps.setBinaryStream(...)方法,并且第三个参数为int类型,而file.length()为long类型,需求进行一下转换,这个在高版本的mysql驱动中应该得到了解决。
 

  1. public static void insert() {  
  2.         try {  
  3.             for (int i = 0; i < filePath.length; i++) {  
  4.                 File file = new File(filePath[i]);  
  5.                 if (!file.exists()) {  
  6.                     continue;  
  7.                 }  
  8.                 ps = getConnection().prepareStatement(INSERT_SQL);  
  9.                 ps.setInt(10);  
  10.                 ps.setString(2, file.getName());  
  11.                 ps.setBinaryStream(3new FileInputStream(file), (int) file.length());  
  12.                 ps.setLong(4, file.length());  
  13.                 ps.executeUpdate();  
  14.             }  
  15.   
  16.         } catch (SQLException e) {  
  17.             e.printStackTrace();  
  18.         } catch (FileNotFoundException e) {  
  19.             e.printStackTrace();  
  20.         }  
  21.     } 


初始化后,数据如下:





剩余的工作就比较简单了,读取数据库中的content内容,IO流读取即可

完整代码
 



 

  1. package com.itxxz.db;  
  2.   
  3. import java.io.File;  
  4. import java.io.FileInputStream;  
  5. import java.io.FileNotFoundException;  
  6. import java.io.FileOutputStream;  
  7. import java.io.IOException;  
  8. import java.io.InputStream;  
  9. import java.sql.Connection;  
  10. import java.sql.DriverManager;  
  11. import java.sql.PreparedStatement;  
  12. import java.sql.ResultSet;  
  13. import java.sql.SQLException;  
  14. import java.sql.Statement;  
  15.   
  16. /** 
  17.  *  
  18.  * @author IT学习者-螃蟹 
  19.  * @date 2015-1-14 
  20.  * @url www.itxxz.com 
  21.  * 
  22.  */  
  23. public class ItxxzTest {  
  24.       
  25.     /**数据库执行语句*/  
  26.     private static final String SELECT_SQL = "SELECT ID ,NAME,CONTENT,FILE_SIZE FROM ITXXZIMG";  
  27.       
  28.     private static final String INSERT_SQL = "INSERT INTO ITXXZIMG( ID ,NAME,CONTENT,FILE_SIZE) VALUES(?,?,?,?)";  
  29.   
  30.     /** 数据库链接配置 */  
  31.     // 驱动路径  
  32.     private static final String driver = "com.mysql.jdbc.Driver";  
  33.     // 用户  
  34.     private static final String userName = "root";  
  35.     // 密码  
  36.     private static final String passwrod = "root";  
  37.     // 链接地址  
  38.     private static final String url = "jdbc:mysql://localhost:3306/itxxz";  
  39.   
  40.     /** 数据库操作类 */  
  41.     private static Connection conn = null;  
  42.     private static PreparedStatement ps = null;  
  43.     private static ResultSet rs = null;  
  44.     private static Statement stmt = null;  
  45.   
  46.     // 初始化参数  
  47.     private static final String[] filePath = { "E:/itxxz/logo.png",  
  48.             "E:/itxxz/banner.jpg""E:/itxxz/ad.png" };  
  49.       
  50.     private static final byte[] Buffer = new byte[1024];  
  51.       
  52.     private static final String filedir = "E:/itxxz/img/";  
  53.       
  54.     private static FileOutputStream fos;  
  55.   
  56.     public static void main(String[] args) {  
  57.         //insert();  
  58.         selectAndExport();  
  59.     }  
  60.   
  61.     /** 
  62.      * 创建链接 
  63.      */  
  64.     public static Connection getConnection() {  
  65.         try {  
  66.             Class.forName(driver);  
  67.             conn = DriverManager.getConnection(url, userName, passwrod);  
  68.         } catch (ClassNotFoundException e) {  
  69.             System.err.println(e.getMessage());  
  70.         } catch (SQLException e) {  
  71.             System.err.println(e.getMessage());  
  72.         }  
  73.         return conn;  
  74.   
  75.     }  
  76.   
  77.     /** 
  78.      * 新增 
  79.      */  
  80.     public static void insert() {  
  81.         try {  
  82.             for (int i = 0; i < filePath.length; i++) {  
  83.                 File file = new File(filePath[i]);  
  84.                 if (!file.exists()) {  
  85.                     continue;  
  86.                 }  
  87.                 ps = getConnection().prepareStatement(INSERT_SQL);  
  88.                 ps.setInt(10);  
  89.                 ps.setString(2, file.getName());  
  90.                 ps.setBinaryStream(3new FileInputStream(file), (int) file.length());  
  91.                 ps.setLong(4, file.length());  
  92.                 ps.executeUpdate();  
  93.             }  
  94.   
  95.         } catch (SQLException e) {  
  96.             e.printStackTrace();  
  97.         } catch (FileNotFoundException e) {  
  98.             e.printStackTrace();  
  99.         }  
  100.     }  
  101.   
  102.     /** 
  103.      * 查询并导出 
  104.      */  
  105.     public static void selectAndExport() {  
  106.         try {  
  107.             PreparedStatement pst = getConnection().prepareStatement(SELECT_SQL);  
  108.             rs = pst.executeQuery();  
  109.             // 循环记录集,查看每一行每一列的记录  
  110.             while (rs.next()) {  
  111.                 String fileName = rs.getString("name");  
  112.                 InputStream is = rs.getBinaryStream("content");  
  113.                 exportImg(is, fileName);  
  114.             }  
  115.   
  116.         } catch (SQLException e) {  
  117.             e.printStackTrace();  
  118.         }  
  119.     }  
  120.   
  121.     /** 
  122.      * 关闭 
  123.      */  
  124.     public static void close() {  
  125.         try {  
  126.             // 关闭记录集  
  127.             if (rs != null) {  
  128.                 rs.close();  
  129.             }  
  130.             if (ps != null) {  
  131.                 ps.close();  
  132.             }  
  133.             if (stmt != null) {  
  134.                 stmt.close();  
  135.             }  
  136.             if (conn != null) {  
  137.                 conn.close();  
  138.             }  
  139.         } catch (SQLException e) {  
  140.             System.err.println(e.getErrorCode());  
  141.         }  
  142.     }  
  143.   
  144.     /** 
  145.      * 导出数据库中二进制流图片 
  146.      */  
  147.     public static void exportImg(InputStream is, String fileName) {  
  148.           
  149.         File dir = new File(filedir);  
  150.         if (!dir.exists()) {  
  151.             dir.mkdirs();  
  152.         }  
  153.         try {  
  154.             File file = new File(filedir+fileName);  
  155.             if(!file.exists()){  
  156.                   
  157.                 file.createNewFile();  
  158.             }  
  159.             fos = new FileOutputStream(file);  
  160.             int size = 0;  
  161.   
  162.             while ((size = is.read(Buffer)) != -1) {  
  163.                 fos.write(Buffer, 0, size);  
  164.             }  
  165.         } catch (IOException e) {  
  166.             e.printStackTrace();  
  167.         }  
  168.     }  
  169. }  

 

0
2
分享到:
评论

相关推荐

    MySQL如何存储图片.doc

    ### MySQL存储图片的知识点 #### 引言:数据库与图片信息管理 在现代数据库应用程序,尤其是基于WEB的应用中,图片信息的存储与显示是常见需求。传统的做法是将图片存储在服务器上的特定目录中,而数据库仅存储...

    c# MySql数据库存储图片

    接下来,我们需要创建一个数据库表来存储图片信息。表通常会包含一个`BLOB`(Binary Large Object)字段,用于存储二进制数据。例如,创建一个名为`Images`的表,结构如下: ```sql CREATE TABLE Images ( ID INT ...

    MySQL存储图片读取图片

    MySQL存储图片读取图片

    C#_MySQL_图片的存储与读取

    本文将详细介绍如何使用C#结合MySQL数据库来存储和读取图片。 #### 一、存储图片 为了实现图片的存储功能,我们需要通过一系列步骤将图片转换为字节流,并将其保存到MySQL数据库中的一个`MediumBlob`类型的字段里...

    mysql存储和显示图片

    #### 一、MySQL存储图片的基本原理 在MySQL数据库中存储图片主要通过二进制格式来实现。由于图片本质上是由一系列的二进制数据构成的,因此将其作为二进制大对象(Binary Large Object, BLOB)类型存储是一种常见且...

    mysql,blob格式存储图片事例,商品展示页面

    在IT行业中,数据库管理是...综上所述,"mysql,blob格式存储图片事例,商品展示页面"是一个涉及数据库设计、图片处理、前后端交互等多个环节的综合实践。理解并掌握这些知识点对于构建功能完备的商品展示系统至关重要。

    Java实现用Mysql存取图片操作实例

    在Java编程中,有时我们需要将图片等大容量的二进制数据存储到数据库中,MySQL提供了BLOB(Binary Large Object)类型,专门用于存储大块的二进制数据。本实例将详细介绍如何使用Java和MySQL进行图片的存取操作。 ...

    图片存储到MySQL数据库中

    5. 查询和显示:使用ResultSet获取BLOB数据,转换回字节数组,然后用ImageIO将字节数组转换回图片并显示。 三、网络编程 在网络编程中,图片的存储和检索通常与HTTP协议和Web服务器紧密结合。当用户请求图片时,...

    Python操作MySQL数据进行图片存取操作

    在本例中,将详细讲解如何使用Python语言以及Pymysql包,对图片进行存储和读取的操作,这涉及到数据库的操作和图片的二进制处理。 首先,我们需要了解什么是Pymysql。Pymysql是一个Python语言中的数据库驱动模块,...

    php+mysql实现数据库图片的存储及显示

    在存储图片时,可以同时生成不同尺寸的缩略图,然后存储它们的二进制数据或路径。这可以通过GD库或Imagick扩展在PHP中实现。 此外,安全方面也需要关注。确保文件上传过程安全,避免非法文件类型的注入,例如通过`...

    JDBC+Mysql实现图片存储

    MySQL是一种广泛使用的开源关系型数据库管理系统,它支持多种存储类型,包括用于存储二进制大数据的BLOB(Binary Large Object)类型,非常适合存储图片数据。 当我们将图片存储到MySQL时,首先需要创建一个包含...

    mysql取存储于数据库中的图片

    在 MySQL 中存储图片需要使用 BLOB 字段,并使用 PreparedStatement 对象来执行 UPDATE 语句,在读取图片时,需要使用 ResultSet 对象来获取 BLOB 字段的数据,然后使用 FileOutputStream 对象将图片数据写入到文件...

    mysql中的图片读取(C#)源码

    在IT行业中,数据库管理和编程是两个...通过理解这些基本概念和操作,你可以构建出自己的C#应用程序,有效地从MySQL数据库中读取和处理图片数据。在实际应用中,还需要考虑安全性、性能优化和错误处理等其他关键因素。

    上机实验6:在MYSQL中存储图片.doc

    在MySQL中存储图片涉及到数据库操作和文件上传,这个实验旨在教你如何将图片作为二进制数据存储在数据库中,然后在网页中展示。这个过程通常包括创建数据库表、处理文件上传以及将文件内容插入到数据库。 首先,...

    易语言MySql图片读取

    总之,易语言结合MySQL数据库,提供了一种有效的方法来处理和存储图片数据。通过理解数据库连接、SQL命令以及二进制数据的操作,你可以实现从数据库中读取和写入图片,这对于各种需要存储和展示图像的应用场景都非常...

    C# 将照片存储到MySQL数据库

    总的来说,C#结合MySQL数据库进行照片存储涉及文件读取、数据库连接、SQL语句执行和参数化查询。这个过程对于开发涉及用户上传照片的应用程序非常常见,例如社交网络或个人博客系统。了解并掌握这些技术对于任何C#...

    Mysql存储过程调用显示图片源码(C#)

    MySQL存储过程调用显示图片源码(C#)是将数据库中的二进制图像数据通过C#编程语言处理并展示在应用程序中的技术实现。这个过程涉及到了数据库操作、数据类型转换以及用户界面显示等多个方面。以下将详细介绍这个主题...

    安卓进行照片在mysql云数据库端读取

    在Android平台上,将照片存储到MySQL云数据库并从其中读取是一个常见的需求,尤其是在构建具有云存储功能的应用程序时。本项目实现了一个功能,允许用户将相册中的照片上传到MySQL云数据库,然后可以从数据库中下载...

    数据库图片的存储和读取

    另一种方式是存储图片的文件路径或URL,将图片实际存储在文件系统中,这可以减轻数据库的压力,但需要处理文件系统的同步问题。 在数据库中存储图片的具体步骤如下: 1. **编码**:图片通常以JPEG、PNG或GIF等格式...

    往MySQL中存储图片的方法

    存储图片后,我们可以通过查询数据库获取图片数据,然后将其转换为`InputStream`,再利用IO流读取并显示图片。这通常在Web应用中实现,例如通过Servlet将二进制流响应给浏览器。 总结: 在MySQL中存储图片涉及创建...

Global site tag (gtag.js) - Google Analytics