当前位置:首页软件开发Java → mysql5存储图片和读取

mysql5存储图片和读取

时间:2020-08-04 09:03:36来源:互联网我要评论(0)

 

开发过程中,有时候会用到用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(1, 0);  

  10.                 ps.setString(2, file.getName());  

  11.                 ps.setBinaryStream(3, new FileInputStream(file), (int) file.length());  

  12.                 ps.setLong(4, file.length());  

  13.                 ps.executeUpdate();  

  14.             }  


  15.         } catch (SQLException e) {  

  16.             e.printStackTrace();  

  17.         } catch (FileNotFoundException e) {  

  18.             e.printStackTrace();  

  19.         }  

  20.     } 


初始化后,数据如下:





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

完整代码
 



 

  1. package com.itxxz.db;  


  2. import java.io.File;  

  3. import java.io.FileInputStream;  

  4. import java.io.FileNotFoundException;  

  5. import java.io.FileOutputStream;  

  6. import java.io.IOException;  

  7. import java.io.InputStream;  

  8. import java.sql.Connection;  

  9. import java.sql.DriverManager;  

  10. import java.sql.PreparedStatement;  

  11. import java.sql.ResultSet;  

  12. import java.sql.SQLException;  

  13. import java.sql.Statement;  


  14. /** 

  15.  *  

  16.  * @author IT学习者-螃蟹 

  17.  * @date 2015-1-14 

  18.  * @url www.itxxz.com 

  19.  * 

  20.  */  

  21. public class ItxxzTest {  


  22.     /**数据库执行语句*/  

  23.     private static final String SELECT_SQL = "SELECT ID ,NAME,CONTENT,FILE_SIZE FROM ITXXZIMG";  


  24.     private static final String INSERT_SQL = "INSERT INTO ITXXZIMG( ID ,NAME,CONTENT,FILE_SIZE) VALUES(?,?,?,?)";  


  25.     /** 数据库链接配置 */  

  26.     // 驱动路径  

  27.     private static final String driver = "com.mysql.jdbc.Driver";  

  28.     // 用户  

  29.     private static final String userName = "root";  

  30.     // 密码  

  31.     private static final String passwrod = "root";  

  32.     // 链接地址  

  33.     private static final String url = "jdbc:mysql://localhost:3306/itxxz";  


  34.     /** 数据库操作类 */  

  35.     private static Connection conn = null;  

  36.     private static PreparedStatement ps = null;  

  37.     private static ResultSet rs = null;  

  38.     private static Statement stmt = null;  


  39.     // 初始化参数  

  40.     private static final String[] filePath = { "E:/itxxz/logo.png",  

  41.             "E:/itxxz/banner.jpg", "E:/itxxz/ad.png" };  


  42.     private static final byte[] Buffer = new byte[1024];  


  43.     private static final String filedir = "E:/itxxz/img/";  


  44.     private static FileOutputStream fos;  


  45.     public static void main(String[] args) {  

  46.         //insert();  

  47.         selectAndExport();  

  48.     }  


  49.     /** 

  50.      * 创建链接 

  51.      */  

  52.     public static Connection getConnection() {  

  53.         try {  

  54.             Class.forName(driver);  

  55.             conn = DriverManager.getConnection(url, userName, passwrod);  

  56.         } catch (ClassNotFoundException e) {  

  57.             System.err.println(e.getMessage());  

  58.         } catch (SQLException e) {  

  59.             System.err.println(e.getMessage());  

  60.         }  

  61.         return conn;  


  62.     }  


  63.     /** 

  64.      * 新增 

  65.      */  

  66.     public static void insert() {  

  67.         try {  

  68.             for (int i = 0; i < filePath.length; i++) {  

  69.                 File file = new File(filePath[i]);  

  70.                 if (!file.exists()) {  

  71.                     continue;  

  72.                 }  

  73.                 ps = getConnection().prepareStatement(INSERT_SQL);  

  74.                 ps.setInt(1, 0);  

  75.                 ps.setString(2, file.getName());  

  76.                 ps.setBinaryStream(3, new FileInputStream(file), (int) file.length());  

  77.                 ps.setLong(4, file.length());  

  78.                 ps.executeUpdate();  

  79.             }  


  80.         } catch (SQLException e) {  

  81.             e.printStackTrace();  

  82.         } catch (FileNotFoundException e) {  

  83.             e.printStackTrace();  

  84.         }  

  85.     }  


  86.     /** 

  87.      * 查询并导出 

  88.      */  

  89.     public static void selectAndExport() {  

  90.         try {  

  91.             PreparedStatement pst = getConnection().prepareStatement(SELECT_SQL);  

  92.             rs = pst.executeQuery();  

  93.             // 循环记录集,查看每一行每一列的记录  

  94.             while (rs.next()) {  

  95.                 String fileName = rs.getString("name");  

  96.                 InputStream is = rs.getBinaryStream("content");  

  97.                 exportImg(is, fileName);  

  98.             }  


  99.         } catch (SQLException e) {  

  100.             e.printStackTrace();  

  101.         }  

  102.     }  


  103.     /** 

  104.      * 关闭 

  105.      */  

  106.     public static void close() {  

  107.         try {  

  108.             // 关闭记录集  

  109.             if (rs != null) {  

  110.                 rs.close();  

  111.             }  

  112.             if (ps != null) {  

  113.                 ps.close();  

  114.             }  

  115.             if (stmt != null) {  

  116.                 stmt.close();  

  117.             }  

  118.             if (conn != null) {  

  119.                 conn.close();  

  120.             }  

  121.         } catch (SQLException e) {  

  122.             System.err.println(e.getErrorCode());  

  123.         }  

  124.     }  


  125.     /** 

  126.      * 导出数据库中二进制流图片 

  127.      */  

  128.     public static void exportImg(InputStream is, String fileName) {  


  129.         File dir = new File(filedir);  

  130.         if (!dir.exists()) {  

  131.             dir.mkdirs();  

  132.         }  

  133.         try {  

  134.             File file = new File(filedir+fileName);  

  135.             if(!file.exists()){  


  136.                 file.createNewFile();  

  137.             }  

  138.             fos = new FileOutputStream(file);  

  139.             int size = 0;  


  140.             while ((size = is.read(Buffer)) != -1) {  

  141.                 fos.write(Buffer, 0, size);  

  142.             }  

  143.         } catch (IOException e) {  

  144.             e.printStackTrace();  

  145.         }  

  146.     }  

  147. }  

 

相关文章

网友评论

热门评论

最新评论

发表评论 查看所有评论()

昵称:
表情: 高兴 可 汗 我不要 害羞 好 下下下 送花 屎 亲亲
字数: 0/500 (您的评论需要经过审核才能显示)

关于万荚 | 联系方式 | 发展历程 | 版权声明 | 帮助(?) | 网站地图 | 友情链接

Copyright 2005-2020 16WJ.COM 〖万荚网〗 版权所有 桂ICP备18000060号 |

声明: 本站所有文章来自互联网 如有异议 请与本站联系