- 一 对于mysql,除了常见的类型外,还有比较少见的Blob类型和Text类型,下面就两种类型进行进一步的解析
- 二 大数据类型
- Text类型(大文本系列)===>>VARCHAR的增强
TINYTEXT: 255个字节 TEXT: 65535字节
MEDIUMTEXT: 16M LONGTEXT: 4G
2.Blob类型(大二进制系列)===>>BINARY的增强
TINYBLOB: 255个字节 BLOB: 65535字节
MEDIUMBLOB: 16M LONGBLOB: 4G
3.分别对应的java类型及其应用
① 存储一部小说或者text类型的文档,此时考虑使用TEXT系列. TEXT系列对应Java中的String类型. 仅仅只需要把 VARCHAR改成TEXT系 列 即可,Java代码不需要改动.
②二进制类型,主要用来存储图像,音频,视频等二级制数据. 一般的,在开发中我们都不会把二进制数据保存到数据库中,而 是 把二进制文件的保存路径存储在数据库中,再通过路径去找到文件即可.
- 三.把一张图片写入数据库和从数据库中读出来,存入到本地中
// 把二进制文件存储到表中
@Test
public void testWrite() {
String hql = "insert into t_image (content) values (?)";
Connection conn = null;
PreparedStatement ps = null;
try {
conn = JdbcUtil.getConnection();
ps = conn.prepareStatement(hql);
InputStream is = Thread.currentThread().getContextClassLoader().getResourceAsStream("E:/WorkPlace_mars2_64/jdbc/1.png");
ps.setBlob(1, new FileInputStream("E:/WorkPlace_mars2_64/jdbc/1.png"));
ps.executeUpdate();
} catch (SQLException | FileNotFoundException e) {
e.printStackTrace();
}finally{
JdbcUtil.realse(null, ps, conn);
}
}
// 把表中的二进制读出来
@Test
public void testRead() {
String hql = "select * from t_image where id = ? ";
Connection conn = null;
PreparedStatement ps = null;
try {
conn = JdbcUtil.getConnection();
ps = conn.prepareStatement(hql);
ps.setInt(1, 5);
ResultSet rs = ps.executeQuery();
while(rs.next()){
Blob blob = rs.getBlob("content");
InputStream is = blob.getBinaryStream();
Path path = Paths.get("E:/WorkPlace_mars2_64/jdbc/2.png");
Files.copy(is, path);
}
} catch (SQLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}finally{
JdbcUtil.realse(null, ps, conn);
}
}