`

实现向MYSQL数据库中存储或提取图片文件

阅读更多

实现向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())";

java 代码
  1. public void doInsertStaffPic(String loginname,String source_URL) {   
  2.   
  3.               Connection conn = null;   
  4.   
  5.               PreparedStatement pre = null;   
  6.               try {   
  7.   
  8.              // 进行数据库连接,这里我使用的是在STRUTS中配置的连接池,当然也可// 以自己通过JDBC直接连   
  9.                      conn = DBProcess.getConnection();                      
  10. //从图片源中获得图片对象并写到缓存中   
  11.   
  12.                      Image image = new ImageIcon(source_URL).getImage();   
  13.   
  14.                      BufferedImage bImage = new BufferedImage(image.getWidth(null),   
  15.   
  16.                                    image.getHeight(null), BufferedImage.TYPE_INT_RGB);   
  17.   
  18.                      Graphics bg = bImage.getGraphics();   
  19.   
  20.                      bg.drawImage(image, 00null);   
  21.   
  22.                      bg.dispose();                       
  23.   
  24. //将图片写入2进制的输出流 并放如到byte[] buf中   
  25.   
  26.                      ByteArrayOutputStream out = new ByteArrayOutputStream();   
  27.   
  28.                      ImageIO.write(bImage, "jpg", out);   
  29.   
  30.                      byte[] buf = out.toByteArray();                       
  31.   
  32.             //获得这个输出流并将他设置到BLOB中   
  33.                      ByteArrayInputStream inStream = new ByteArrayInputStream(buf);   
  34.                      pre = conn.prepareStatement(insertstaffpicquery);   
  35.                      pre.setString(1, loginname);   
  36.                      pre.setBinaryStream(2, inStream, inStream.available());   
  37.                      // 执行写如数据   
  38.   
  39. pre.executeUpdate();                     
  40.               } catch (Exception exc) {   
  41.                      exc.printStackTrace();   
  42.               }   
  43.               finally {   
  44.                      try {   
  45.                             pre.close();   
  46.                             conn.close();   
  47.                      } catch (SQLException e) {   
  48.                             e.printStackTrace();   
  49.                      }   
  50.               }   
  51.        }  

 

2 下代码实现从MYSQL中获取图片文件并写入本地文件系统:
…………………………

private final String writeoutquery = "insert into employeephoto (Employee_ID,Binary_Photo,LastMod,Created) values (?,?, NOW(), NOW())";

java 代码
  1. // retrive the picture data from database and write it to the local disk   
  2.   
  3.        public void doGetAndShowStaffPic(String loginname, String dir) {   
  4.         FileOutputStream output = null;   
  5.   
  6.         InputStream input = null;   
  7.               Connection conn = null;   
  8.               ResultSet rs = null;   
  9.               PreparedStatement pre = null;   
  10.               try {   
  11.   
  12.                      conn = DBProcess.getConnection();   
  13.                      pre = conn.prepareStatement(writeoutquery);   
  14.                      pre.setString(1, loginname);   
  15.                      rs = pre.executeQuery();   
  16.                      if (rs.next()) {   
  17.   
  18.                 // 从数据库获得2进制文件数据   
  19.                             Blob image = rs.getBlob("Binary_Photo");   
  20.   
  21.                             // setup the streams   
  22.                             Input = image.getBinaryStream();                     
  23.                             try {   
  24.   
  25.                     // 设置写出路径。   
  26.                                    output = new FileOutputStream(dir);   
  27.                             } catch (FileNotFoundException e1) {                                    
  28.                                    e1.printStackTrace();   
  29.                             }   
  30.                             // set read buffer size 注意不要设置的太小,要是太小,图片可能不完整   
  31.                             byte[] rb = new byte[1024000];   
  32.                             int ch = 0;   
  33.                             // process blob   
  34.                             try {   
  35.   
  36.                    // 写入本地文件系统   
  37.                                    while ((ch = input.read(rb)) != -1) {   
  38.                                           output.write(rb, 0, ch);                                            
  39.                                    }                                      
  40.                             } catch (IOException e) {                                     
  41.                                    e.printStackTrace();   
  42.                             }                              
  43.                             try {   
  44.                                    input.close();   
  45.                             } catch (IOException e) {                                     
  46.                                    e.printStackTrace();   
  47.                             }   
  48.                             try {   
  49.                                    output.close();   
  50.                             } catch (IOException e) {                           
  51.                                    e.printStackTrace();   
  52.                             }   
  53.                      }   
  54.               } catch (SQLException e) {   
  55.                      e.printStackTrace();   
  56.               }   
  57.               finally {   
  58.                      try {   
  59.                             rs.close();   
  60.                             pre.close();   
  61.                             conn.close();   
  62.                      } catch (SQLException e) {   
  63.                             e.printStackTrace();   
  64.                      }   
  65.               }   
  66.        }  


来源于javaResearch,作者 Jegg

分享到:
评论

相关推荐

    数据库图片批量转储文件demo

    这个工具能够从MySQL数据库中提取图片,数据库中的图片路径信息被用来定位并下载到本地。默认的目标文件夹是“D:/tempfile”,用户可以根据自己的需求更改这个路径。这表明程序具有一定的灵活性,适应不同用户的环境...

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

    在进行图片存取操作之前,我们首先需要在MySQL数据库中建立一个库,本次实验的数据表名称为thumbnail,包含了三个字段:IdImg,NameImg和DataImg。其中,IdImg是图片ID,字段值自动增加;NameImg用于存储图片的...

    将图片二进制流存储到数据库中

    5. **查询与恢复**:检索图片时,需要从数据库中提取BLOB字段,然后将其写入文件系统。这个过程通常涉及SELECT语句,然后使用编程语言的相应方法将二进制数据写入新文件。 6. **性能和存储考虑**:虽然二进制流存储...

    图片存储到数据库保存二进制文件,并在DATAGRIDVIEW中显示出来

    在C#编程中,将图片存储到数据库并以二进制数据的形式保存,以及在DataGridView控件中显示这些图片,是一项常见的任务。这种操作在处理大量图像数据时尤其有用,例如在开发一个需要展示产品图片的电子商务应用或者...

    Python-爬取淘宝MM用户相册及图片数据存储到MySQL数据库中

    通过以上步骤,我们可以实现一个完整的Python Web爬虫项目,从淘宝网站抓取MM用户的相册和图片数据,并将其存储到MySQL数据库中。这个过程中涉及到的技术和知识点广泛,对于提升Python编程和Web爬虫能力大有裨益。

    向数据库插入blob数据实例源码--在mysql中通过

    Blob(Binary Large Object)在数据库中用于存储二进制大对象,如图片、音频或视频文件等。在MySQL中,Blob类型字段常用于存储大块的非结构化数据。本实例将详细介绍如何在MySQL数据库中插入Blob数据,并提供源码...

    世界各国 省市县 省份 城市 三级数据库表 资源下载 mysql

    标题中的“世界各国 省市县 省份 城市 三级数据库表 资源下载 mysql”表明这是一个关于全球地理信息的数据资源,特别强调了数据存储在MySQL数据库中,意味着我们可以用SQL语言来查询和操作这些数据。这个数据库可能...

    基于python+图文识别,将微信支付单据是被并存放mysql数据库

    在本项目中,我们利用Python编程语言,结合图像处理和文字识别技术,实现了从微信支付单据中自动提取数据并将其存储到MySQL数据库的功能。这是一个自动化处理和数据管理的典型案例,涉及到了多个关键技术点。 首先...

    将图片存入数据库,并从数据库中读取

    这种方式结合了数据库管理和文件系统的优点,同时避免了过度依赖数据库存储大量非结构化数据的缺点。 在提供的`WindowsFormsApplication`可能是一个简单的桌面应用程序示例,它实现了上述的图片存取功能。这个应用...

    数据库图片保存到Excel代码工程

    在本项目中,我们需要从数据库中提取图片的BLOB数据,然后将其转换回图片格式,如JPEG或PNG。 然后,我们需要关注Excel的使用。Excel是一种强大的电子表格软件,广泛用于数据处理和分析。在Python中,可以使用...

    SQL数据库里存取图片

    - **使用外部存储**:将图片实际存储在文件系统或专门的文件存储服务中,而在数据库中只存储指向这些文件的链接。 - **优化数据库结构**:合理设计表结构和索引,避免对BLOB字段进行不必要的操作。 - **数据库分区**...

    WEB页面,一个上传Excel文件并将内容保存到数据库中

    在Web开发中,将用户上传的Excel文件读取并保存到数据库是一项常见的需求。这个项目实现了这个功能,提供了从头到尾的完整代码,对于学习和应用都非常有帮助。下面我们将详细探讨涉及的知识点。 首先,我们需要理解...

    oracle中的BLOB(照片)转换到mysql中

    Oracle数据库系统支持多种复杂的数据类型,其中包括BLOB(Binary Large Object),用于存储非结构化的大数据,如图片、音频或视频文件。而MySQL同样提供了BLOB类型,用于相似的用途。本篇将详细讲解如何在Oracle与...

    基于JAVA技术爬虫爬网站图片设计与实现(JSP,MySQL)(含录像)(开题报告,毕业论文12000字,程序代码,MySQL数据库,答辩PPT).zip

    开发者可能将爬取的数据存储在MySQL数据库中,然后通过JSP页面动态查询并显示这些图片信息。这涉及到JDBC(Java Database Connectivity)技术,用于连接和操作数据库。 描述中提到的“含录像”表明该项目提供了教学...

    一个完整的数据库图片字段转化为本地图片的例子

    7. **错误处理**:编程过程中,应考虑处理可能出现的错误,如网络中断、数据库连接问题或文件写入权限问题。 8. **优化与性能**:大量图片的转换可能会对数据库性能产生影响,因此需要考虑批量处理、缓存机制或异步...

    HYZ数据库文件读写控件

    它提供了直观的API和用户友好的界面,允许开发者轻松地将图片、音频等各类文件存储到数据库中,并能快速检索和读取,确保数据的安全性和完整性。通过集成此控件,开发者可以构建出更高效、更可靠的文件管理系统。 ...

    Python实现检测图片中的人脸,将识别到的人脸向量存入数据库,并实现提交的图片的人脸信息与入库的人脸信息进行比对

    在本项目中,我们主要探讨如何使用Python进行人脸检测、计算人脸向量并将其存储到数据库,以及如何比对提交图片中的人脸信息与数据库中已存的人脸信息。这是一项涉及计算机视觉和机器学习技术的任务,具体涉及到以下...

    C# 数据库图片转PDF存储

    从数据库中提取的图片通常是以二进制数据的形式存储,需要先写入到临时文件夹,以便进行后续处理。C#提供了System.IO命名空间,可以用来创建、读取和删除文件。 4. **PDF转换**: 将图片转换为PDF文件,项目可能...

    scrapy抓取数据存储至本地mysql数据库-大众点评爬虫.zip

    数据存储: 爬虫将提取的数据存储到数据库、文件或其他存储介质中,以备后续分析或展示。常用的存储形式包括关系型数据库、NoSQL数据库、JSON文件等。 遵守规则: 为避免对网站造成过大负担或触发反爬虫机制,爬虫...

    批量提取图片的文件名信息

    描述中提到的“快速提取图片的文件名”,意味着有一种方法或工具可以高效地从大量图片中获取其文件名。这通常涉及到遍历文件夹结构,读取每个文件的元数据,并将文件名存储在一个清单或输出到屏幕上。这种操作对于...

Global site tag (gtag.js) - Google Analytics