blob的插入操作方法优化
oracle环境的jdbc操作
[方法1]
先插入empty_blob(),在检索出刚插入的数据,更新blob
插入代码
[方法2]
和1相同,但是,我们不用两次操作了,因为我们可以直接用byte[]来替代blob,如:
PreparedStatement pstmt = null;
StringBuffer sb = new StringBuffer(800);
sb.append("INSERT INTO ARTICAL");
sb.append("(");
sb.append("ARTICAL_ID");
sb.append(",");
sb.append("CATEGORY_ID");
sb.append(",");
sb.append("ARTICAL_TITLE");
sb.append(",");
sb.append("ARTICAL_TAGS");
sb.append(",");
sb.append("ARTICAL_INTO_DATE");
sb.append(",");
sb.append("ARTICAL_FILE_TYPE");
sb.append(",");
sb.append("ARTICAL_CONTENT");
sb.append(")");
sb.append(" ");
sb.append("values");
sb.append("(");
sb.append("?");
sb.append(",");
sb.append("?");
sb.append(",");
sb.append("?");
sb.append(",");
sb.append("?");
sb.append(",");
sb.append("?");
sb.append(",");
sb.append("?");
sb.append(",");
// sb.append("empty_blob()");
sb.append("?");
sb.append(")");
try {
pstmt = createPreparedStatement(sb.toString());
pstmt.setLong(1, artical.getArticalId());
pstmt.setLong(2, artical.getCategoryId());
pstmt.setString(3, artical.getTitle());
pstmt.setString(4, artical.getTags());
pstmt.setDate(5, new Date(System.currentTimeMillis()));
pstmt.setString(6, artical.getFileType());
// 此处直接用数组
pstmt.setBytes(7, artical.getContent());
pstmt.executeUpdate();
} catch (SQLException e) {
} finally {
if (pstmt != null) {
pstmt.close();
}
}
// Artical部分代码
public byte[] getContent() {
return content;
}
上面的方法可以一次就完成对数据库的插入操作,而不是上面的两步。
但是,是有缺憾的。
缺点:
byte[]的长度只能是int的最大长度,所以,这也就决定了此blob对象的最大长度,如果,你的blob的长度超出了Integer.MAX_VALUE就会出问题的。
1KB=2^10bytes
1MB=2^20bytes
1GB=2^30bytes
Integer的最大值在java中是2^32
所以,此blob的最大容量是
2^2*1GB=4GB
这对于一般的应用足矣。
|----------------------------------------------------------------------------------------|
版权声明 版权所有 @zhyiwww
引用请注明来源 http://www.blogjava.net/zhyiwww
|----------------------------------------------------------------------------------------|