刚刚打手枪一起从包含二进制数据的旧的数据库导出,我绊倒在我们的实用方法之一的除外:
java.lang.AbstractMethodError:net.sourceforge.jtds.jdbc.BlobImpl.free()
检查我们的代码库后,我发现这是从来没有使用过的工具方法到现在为止,bascially它看起来像这样:
public BinaryHolder getBinary(final int columnIndex) throws SQLException {
Blob blob = null;
try {
blob = resultSet.getBlob(columnIndex);
final BinaryHolder binary = BinaryHolderUtil.create(blob);
return binary;
} finally {
if (blob != null)
blob.free();
}
}
BinaryHolder只是一个包装,holdes二进制数据(你问之前,代码执行罚款,直至到达最终条款- BinaryHolderUtil.create(BLOB) 不尝试释放BLOB)。
进一步调查我发现,在其他地方,我们访问的Blob的使用getBlob()是刚刚获得的blob和完全不free'd(的Javadoc说,它会自动设置时,结果集是关闭的)。
现在问题: 如果斑点是免费的()“D手动(毕竟ResultSet中可持有多只访问BLOB),如果是怎么能免费()”在与工作连路D司机没有实现呢?
(我们使用SQL-Server和JTDS1.25,如果这是不是已经从异常明显)