1. TINYBLOB - 255 bytes
2.BLOB - 65535 bytes(64KB)
3.MEDIUMBLOB - 16,777,215 bytes(16MB) (2^24 - 1)
4.LONGBLOB - 4G bytes (2^32 – 1)
我们根据具体的大小需求选择图片的字段类型。
下面我的项目中使用的建表sql语句
create table ofUser(id int primary key not null auto_increment, /*用户id*/
username varchar(64) unique key not null, /*用户名*/
plainPassword varchar(32), /*未加密密码*/
encryptedPassword varchar(100), /*加密密码*/
name varchar(100), /*用户姓名*/
sex varchar(5), /*性别*/
birthday varchar(20), /*生日*/
email varchar(100) unique key not null, /*邮箱*/
phone varchar(50), /*手机号*/
addr varchar(100), /*地址*/
sign varchar(100), /*签名*/
headimage mediumblob, /*头像*/
creationDate char(15), /*注册时间*/
modificationDate char(15)); /*上次修改时间*/
可以看出我选择了mediumblob类型保存头像。
2.在Dao的vo类中将图片定义为InputStream类型。

剩下就是dao保存和读取头像了。
具体的DAO实现这里就不详细说明。
3.保存操作
-
User user=new User();
-
user.setUsername("test");
-
user.setEncryptedPassword("88888888888");
-
-
/**
-
* 要保存的头像路径
-
*/
-
File file=new File("/home/vibexie/head.png");
-
try {
-
InputStream inputStream=new FileInputStream(file);
-
/**
-
* 调用user对像的set方法,将头像保存进user对象中
-
*/
-
user.setHeadimage(inputStream);
-
} catch (FileNotFoundException e) {
-
// TODO Auto-generated catch block
-
e.printStackTrace();
-
}
-
-
/**
-
* 添加该用户
-
*/
- UserDaoFactory.getInstance().addUser(user);
-
/**
-
* 将图片保存的路径
-
*/
-
File file=new File("/home/vibexie/head2.png");
-
-
/**
-
* 通过用户名在数据库中返回该用户的全部信息,即一个User对象
-
*/
-
User user2=UserDaoFactory.getInstance().getUser("username","test");
-
-
try {
-
OutputStream outputStream=new FileOutputStream(file);
-
-
/**
-
* 获取user2的InputStream对象
-
*/
-
InputStream inputStream=user2.getHeadimage();
-
-
byte[] bytes=new byte[inputStream.available()];
-
-
/**
-
* 从InputStream中读取头像保存在字节流中
-
*/
-
user2.getHeadimage().read(bytes);
-
-
/**
-
* 写入磁盘保存
-
*/
-
outputStream.write(bytes);
-
-
} catch (Exception e) {
-
// TODO Auto-generated catch block
-
e.printStackTrace();
- }