• 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();
                                        }
                                }
                    }
                }
            }
    
        }
    }

    5.Over!

  • 相关阅读:
    yii2:如果获取config/web.php配置的值?
    yii2:引用项目外的文件或类
    yii2: oracle汉字占用字节长度
    yii2: oralce中文,有的汉字是2个字节,有的汉字是3个字节
    yii2:frontend/frontactoin curl生成
    Appium做Android功能自动化测试
    appium server日志分析
    appium的初始化准备工作
    Appium的Java封装
    使用Runtime.getRuntime().exec()在java中调用python脚本
  • 原文地址:https://www.cnblogs.com/kakag/p/3145140.html
Copyright © 2020-2023  润新知