• 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!

  • 相关阅读:
    896. Monotonic Array单调数组
    865. Smallest Subtree with all the Deepest Nodes 有最深节点的最小子树
    489. Robot Room Cleaner扫地机器人
    JavaFX
    《Python CookBook2》 第一章 文本
    《Python CookBook2》 第一章 文本
    《Python CookBook2》 第一章 文本
    《Python CookBook2》 第一章 文本
    《Python CookBook2》 第一章 文本
    《Python CookBook2》 第一章 文本
  • 原文地址:https://www.cnblogs.com/kakag/p/3145140.html
Copyright © 2020-2023  润新知