zoukankan      html  css  js  c++  java
  • Java+MySql图片数据保存与读取的具体实例

    1.创建表:
    drop table if exists photo;
    CREATE TABLE photo (
        id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
        name VARCHAR(100) COMMENT '名称',    photo blob COMMENT '照片')
    ENGINE=InnoDB
    DEFAULT CHARSET=utf8
    COLLATE=utf8_general_ci;

    图片在MySql中的数据存储格式为blob类型;Blob是一个可以存储二进制文件的容器。

    2.编写图片流数据存取的工具类:

    import java.io.File;
    import java.io.FileInputStream;
    import java.io.FileNotFoundException;
    import java.io.FileOutputStream;
    import java.io.IOException;
    import java.io.InputStream;

    public class ImageUtil {
        private static File file = null;

        /**
         * 从本地文件读取图像的二进制流
         *
         * @param infile
         * @return
         */
        public static FileInputStream getImageByte(String infile) {
            FileInputStream imageByte = null;
            file = new File(infile);
            try {
                imageByte = new FileInputStream(file);
            } catch (FileNotFoundException e) {
                e.printStackTrace();
            }
            return imageByte;
        }

        /**
         * 将图片流读出为图片
         *
         * @param inputStream
         * @param path
         */
        public static void readBlob(InputStream inputStream, String path) {
            try {
                FileOutputStream fileOutputStream = new FileOutputStream(path);
                byte[] buffer = new byte[1024];
                int len = 0;
                while ((len = inputStream.read(buffer)) != -1) {
                    fileOutputStream.write(buffer, 0, len);
                }
                inputStream.close();
                fileOutputStream.close();
            } catch (FileNotFoundException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            }

        }
    }

    3.将本地文件保存到数据库

      需要添加MySql的数据库驱动--mysql-connector-java-5.1.24-bin.jar

    import java.io.IOException;
    import java.io.InputStream;
    import java.sql.Connection;
    import java.sql.DriverManager;
    import java.sql.PreparedStatement;
    import java.sql.SQLException;

    public class ImageInsert {
        public static void main(String[] args) {
            try {
                Class.forName("com.mysql.jdbc.Driver").newInstance();
            } catch (InstantiationException e) {
                e.printStackTrace();
            } catch (IllegalAccessException e) {
                e.printStackTrace();
            } catch (ClassNotFoundException e) {
                e.printStackTrace();
            }
            String user = "root";
            String password = "root";
            String url = "jdbc:mysql://localhost:3306/test?characterEncoding=utf-8";
            Connection connection = null;
            try {
                connection = DriverManager.getConnection(url, user, password);
            } catch (SQLException e) {
                e.printStackTrace();
            }
            PreparedStatement preparedStatement = null;
            InputStream inputStream = null;
            inputStream = ImageUtil.getImageByte("D:\temp\photo1.png");
            try {
                String sql = "insert into photo(id,name,photo) values(?,?,?)";
                preparedStatement = connection.prepareStatement(sql);
                preparedStatement.setInt(1, 1);
                preparedStatement.setString(2, "朱莉");
                preparedStatement.setBinaryStream(3, inputStream,
                        inputStream.available());
                preparedStatement.execute();
            } catch (SQLException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            } finally {
                try {
                    if (inputStream != null)
                        inputStream.close();
                } catch (IOException e) {
                    e.printStackTrace();
                } finally {
                    try {
                        if (preparedStatement != null)
                            preparedStatement.close();
                    } catch (SQLException e) {
                        e.printStackTrace();
                    } finally {
                        try {
                            connection.close();
                        } catch (SQLException e) {
                            e.printStackTrace();
                        }
                    }
                }
            }

        }
    }

    4.从数据库中读取并生成图片

    import java.io.IOException;
    import java.io.InputStream;
    import java.sql.Connection;
    import java.sql.DriverManager;
    import java.sql.ResultSet;
    import java.sql.SQLException;
    import java.sql.Statement;

    public class ImageGet {
        public static void main(String[] args) {
            try {
                Class.forName("com.mysql.jdbc.Driver").newInstance();
            } catch (InstantiationException e) {
                e.printStackTrace();
            } catch (IllegalAccessException e) {
                e.printStackTrace();
            } catch (ClassNotFoundException e) {
                e.printStackTrace();
            }
            String user = "root";
            String password = "root";
            String url = "jdbc:mysql://localhost:3306/test?characterEncoding=utf-8";
            Connection connection = null;
            try {
                connection = DriverManager.getConnection(url, user, password);
            } catch (SQLException e) {
                e.printStackTrace();
            }
            Statement statement = null;
            ResultSet resultSet = null;
            InputStream inputStream = null;
            try {
                statement = connection.createStatement();
                String sql = "select p.photo from photo p where id = 1";
                resultSet = statement.executeQuery(sql);
                resultSet.next();
                inputStream = resultSet.getBinaryStream("photo");
                ImageUtil.readBlob(inputStream, "D:\temp\photo2.png");
            } catch (SQLException e) {
                e.printStackTrace();
            } finally {
                try {
                    if (inputStream != null)
                        inputStream.close();
                } catch (IOException e) {
                    e.printStackTrace();
                } finally {
                    try {
                        if (resultSet != null)
                            resultSet.close();
                    } catch (SQLException e) {
                        e.printStackTrace();
                    } finally {
                        if (statement != null)
                            if (statement != null)
                                try {
                                    statement.close();
                                } catch (SQLException e) {
                                    e.printStackTrace();
                                } finally {
                                    if (connection != null)
                                        try {
                                            connection.close();
                                        } catch (SQLException e) {
                                            e.printStackTrace();
                                        }
                                }
                    }
                }
            }

        }
    }

  • 相关阅读:
    Understand Rails Authenticity Token
    正则表达式:数值及数值型字符串三位一组格式化
    ceph主要数据结构解析2-Rados.h文件
    遍历聚合对象中的元素——迭代器模式(三)
    ceph主要数据结构解析3-Ceph_fs.h文件
    linux crontab 定时命令
    mysql数据类型详解
    遍历聚合对象中的元素——迭代器模式(四)
    Eclipse自动插件依赖的一种配置解决方式
    php缓存小技巧
  • 原文地址:https://www.cnblogs.com/ljsy-yjx/p/5404072.html
Copyright © 2011-2022 走看看