往MySQL中存储图片

1.创建数据库:

CREATE TABLE
    photo
    (
        id INT NOT NULL AUTO_INCREMENT,
        name VARCHAR(100),
        photo MediumBlob,
        PRIMARY KEY (id)
    )
    ENGINE=InnoDB DEFAULT CHARSET=utf8;
/*
MySQL的四种BLOB类型
类型 大小(单位:字节)
TinyBlob 最大 255
Blob 最大 65K
MediumBlob 最大 16M
LongBlob 最大 4G*/

2.新建包名com.sk.util,新建ImageUtil类,如下:

package com.sk.util;


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.新建包名com.sk.handle,新建WriteImage类,如下:

package com.sk.handle;

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

import com.sk.util.ImageUtil;

public class WriteImage {
	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/oa?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:\\工作\\图片\\5.jpg");
		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.在新建ReadImage类,如下:

package com.sk.handle;

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;

import com.sk.util.ImageUtil;

public class ReadImage {
	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/oa?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:\\1.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.图片路径要修改。

 

爱生活,爱分享,爱康宝!

©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页