JAVA从MySQL提取图片_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!

希望与广大网友互动??

点此进行留言吧!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值