一、BLOB(二进制数据)
1. MySQL中,BLOB是一个二进制大型对象,是一个可以存储大量数据的容器,它能容纳不同大小的数据。
2.BLOB字段适用于存储大量的二进制数据,如图像、视频、音频,文件等。
3. MySQL的四种BLOB类型(除了在存储的最大信息量上不同外,他们是等同的):
4. 实际使用中根据需要存入的数据大小定义不同的BLOB类型。需要注意的是:如果存储的文件过大,数据库的性能会下降。
二、存储和读取BLOB文件
(1)向数据库存储BLOB文件
主要操作:
InputStream inputStream = new FileInputStream("阿阮.jpg");
preparedStatement.setBlob(7,inputStream);
例:
@Test
public void test14() {
Connection conn = null;
PreparedStatement preparedStatement = null;
try {
//获取数据库连接
conn = JDBCTools.getConnection();
//设置 SQL语句
String sql = "INSERT INTO Student(Sno, Sname, Ssex, Sage, Sdept, S_entrance, S_picture) " +
"VALUES(?,?,?,?,?,?,?)";
//为占位符赋值
preparedStatement = conn.prepareStatement(sql);
preparedStatement.setString(1, "201307081");
preparedStatement.setString(2, "阿阮");
preparedStatement.setString(3, "女");
preparedStatement.setInt(4, 18);
preparedStatement.setString(5, "GJ");
preparedStatement.setDate(6, Date.valueOf("2013-07-08"));
InputStream inputStream = new FileInputStream("阿阮.jpg");
preparedStatement.setBlob(7,inputStream);
//执行 SQL语句
preparedStatement.executeUpdate();
} catch(Exception e) {
e.printStackTrace();
} finally {
JDBCTools.release(null,preparedStatement,conn);
}
}
(2)读取BLOB文件
主要操作:
Blob picture = resultSet.getBlob(7);
InputStream in = picture.getBinaryStream();
OutputStream out = new FileOutputStream("11.jpg");
byte [] buffer = new byte[1024];
for(int len = in.read(buffer); len != -1; len = in.read(buffer)) {
out.write(buffer,0,len);
out.flush();
}
out.close();
in.close();
例:
@Test
public void test15() {
Connection conn = null;
PreparedStatement preparedStatement = null;
ResultSet resultSet = null;
try {
//1. 获取连接
conn = JDBCTools.getConnection();
String sql = "SELECT * FROM Student " +
"WHERE Sname='阿阮'";
//2. 获取Statement
preparedStatement = conn.prepareStatement(sql);
//4. 执行查询,得到ResultSet
resultSet = preparedStatement.executeQuery();
//5. 处理ResultSet
while(resultSet.next()) {
//按列读取
String no = resultSet.getString(1);
String name = resultSet.getString(2);
String sex = resultSet.getString(3);
int age = resultSet.getInt(4);
String dept = resultSet.getString(5);
Date entrance = resultSet.getDate(6);
Blob picture = resultSet.getBlob(7);
System.out.println(no+" "+name+" "+sex+" "
+age+" "+dept+" "+entrance);
InputStream in = picture.getBinaryStream();
OutputStream out = new FileOutputStream("11.jpg");
byte [] buffer = new byte[1024];
for(int len = in.read(buffer); len != -1; len = in.read(buffer)) {
out.write(buffer,0,len);
out.flush();
}
out.close();
in.close();
}
} catch(Exception e) {
e.printStackTrace();
} finally {
JDBCTools.release(resultSet,preparedStatement,conn);
}
}
JDBC学习笔记:
1. 获取数据库连接 http://my.oschina.net/daowuming/blog/704243
2. 通过Statement执行更新、查询操作 http://my.oschina.net/daowuming/blog/704384
3. 使用PrepareStatement http://my.oschina.net/daowuming/blog/704432
4. 使用ResultSetMetaData 对象处理结果集元数据 http://my.oschina.net/daowuming/blog/704487
5. 使用DatabaseMetaData获取数据库信息 http://my.oschina.net/daowuming/blog/704553
6. BLOB ----当前----
7. 处理事务与隔离级别 http://my.oschina.net/daowuming/blog/704611
8. 批量处理 http://my.oschina.net/daowuming/blog/704641
9. 数据库连接池 http://my.oschina.net/daowuming/blog/704700
10. 调用函数与存储过程 http://my.oschina.net/daowuming/blog/704813