BLOB
BLOB全称为二进制大型对象(Binary Large Object)。它用于存储数据库中的大型二进制对象。可存储的最大大小为4G字节,通常像图片、文件、音乐等信息就用BLOB字段来存储。
CLOB
CLOB全称为字符大型对象(Character Large Object)。它与LONG数据类型类似,只不过CLOB用于存储数据库中的大型单字节字符数据块,不支持宽度不等的字符集。可存储的最大大小为4G字节,文章或者是较长的文字,就用CLOB存储,这样对以后的查询更新存储等操作都提供很大的方便。
Java操作BLOB和CLOB
insert语句不支持blob字段的超长16进制字符串,执行sql会提示过长(较短可以)。
一、mysql数据库
写字段
存–手动执行sql语句,借助load_file()函数
/absPath 为文件所在路径
insert into image_source(id, column_blob) values (‘123’, load_file("/absPath"));
存–使用preparedStatement
public static void insertBlobValue(File file){
PreparedStatement ps = connection.prepareStatement("insert into image_source (id, column_blob) values (?, ?)");
ps.setInt(1, 123);
//输入流
ps.setBlob(2, file.getInputStream(), file.getSize());
ps.execute();
}
//加入Java开发交流君样:756584822一起吹水聊天
存–使用jdbcTemplate
//借助LobHandler
final LobHandler lobHandler = new DefaultLobHandler();
jdbcTemplate.execute(modelSql, new AbstractLobCreatingPreparedStatementCallback(lobHandler) {
@Override
protected void setValues(PreparedStatement preparedStatement, LobCreator lobCreator) throws SQLException, DataAccessException {
lobCreator.setClobAsString(preparedStatement, 3, "yourClobContent");
}
});
LobCreator提供了多个接口来简化大字段的写入:对于BLOB,内容来源可以是InputStream、byte[];对于CLOB,内容来源可以是InputStream(自行确保都是ascii字符)、Reader、String。
读字段
同下Oracle方法。
二、oracle数据库
同mysql,blob无法直接insert,需要借助存储过程,CallableStatement,PreparedStatement,或JdbcTemplate。