一、BLOB类型介绍
在MySQL中,BLOB是一个二进制的大型对象,可以存储大量数据的容器,它能容纳不同大小的数据。
在MySQL中有四种BLOB类型。
实际使用中根据需要存入的数据大小定义不同的BLOB类型。需要注意的是,如果存储的文件过大,数据库的性能会下降。
二、Java数据类型与MySQL类型对照表
对于blob,一般用于对图片的数据库存储,原理是把图片打成二进制,然后进行的一种存储方式,在java中对应byte[]数组。
对于boolen类型,在mysql数据库中,个人认为用int类型代替较好,对bit操作不是很方便,尤其是在具有web页面开发的项目中,表示0/1,对应java类型的Integer较好。
三、添加Blob到数据库
Person.java
public class Person{
private int id;
private String name;
private String city;
private int age;
private float salary;
private byte[] head;
public Person(){
super();
}
public Person(int id,String name,String city,int age,float salary,byte[] head){
super();
this.id = id;
this.name = name;
this.city = city;
this.age = age;
this.salary = salary;
this.head = head;
}
//...get、set方法
}
@Test
public void testAddPerson() throws Exception{
FileInputStream fis = new FileInputStream("1.jpg");
byte[] bs = inputStream2Byte(fis);
addPerson(new Person(0,"HeHe2","BJ",23,1300,bs));
}
/*
* 插入数据
*/
public static void addPerson(Person p) throws Exception{
String sql = "insert into person(id,name,city,age,salary,head) values(?,?,?,?,?,?)";
JdbcTools.update(sql,p.getId(),p.getName(),p.getCity(),p.getAge(),p.getSalary(),p.getHead());
}
/*
* 输入流转换为字节数组
* @param inStream
* @return
* @throws Exception
*/
public static byte[] inputStream2Byte(InputStream inStream) throws Exception{
ByteArrayOutputStream outSteam = new ByteArrayOutputStream();
byte[] buffer = new byte[1024];
int len = -1;
while((len = inStream.read(buffer)) != -1){
outSteam.write(buffer,0,len);
}
outSteam.close();
inStream.close();
return outSteam.toByteArray();
}
JdbcTools.update()方法
/*
* 通用的增删改方法
* 执行SQL语句,使用PreparedStatemnt
* @param sql 带占位符的sql语句
* @param args 填写SQL占位符的可变参数
*/
public static void update(String sql,Object...args){
Connection con = null;
PreparedStatement ps = null;
ResultSet rs = null;
try{
con = JdbcTools.getConnection();
ps = con.prepareStatement(sql);
for(int i = 0;i < args.length;i++){
ps.setObject(i + 1,args[i]);
}
ps.execute();
}catch (Exception e) {
e.printStackTrace();
}
finally{
JdbcTools.releaseResource(con,ps,rs);
}
}
结果:
在最后BLOb中右键另存为图片即可看到。
越努力,越幸运!