在处理一个包含二进制数据的旧数据库的导出时,我偶然发现了我们的一个实用方法中的一个异常:
java.lang.AbstractMethoderror:net.sourceforge.jtds.jdbc.blobimpl.free()
在检查了我们的代码库之后,我发现实用方法直到现在都没有使用过,基本上是这样的:
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只是保存二进制数据的包装器(在您询问之前,代码执行得很好,直到它到达finally子句--BinaryHolderUtil.Create(blob)并不试图释放blob)。
进一步研究,我发现在访问blob的其他任何地方,blob都是使用getBlob()获得的,根本不是空闲的(Javadoc表示,当结果集关闭时,它将被自动释放)。
现在的问题是:blob是否应该手动free()(毕竟ResultSet可能不仅仅用于访问blob),如果是的话,如何使free()以一种即使没有实现它的驱动程序也能工作的方式呢?
(我们将SQL-Server与JTDS1.25一起使用,如果从异常中看不出这一点的话)
JDBC4.0/Java6中引入了blob.free()
。因此,您最有可能使用的是JDBC3.0或更早的JDBC驱动程序。
与大多数(JDBC)资源一样,尽快关闭它们有其优点(例如GC可以更早地收集它,释放数据库资源等)。这也是为什么您可以关闭ResultSet
,即使它在关闭语句时已经关闭(或再次执行语句),就像您可以关闭语句,即使它在关闭
连接
时已经关闭一样。
因此,blob
不需要释放,但通常在使用完后释放它是个好主意。
AccessibilityService在系统的内存管理方面与普通服务有何不同? 我想问的是:系统可以为了节省内存而关闭AccessibilityService吗?如果可以,当您进入AccessibilityService时,您会看到它打开还是关闭?用户是否必须再次手动打开? 使用startForeground是否有助于使AccessibilityService保持活动状态? 在一个类似的问题中,
问题内容: 我正在创建一个新的SQL Server 2008数据库。我有两个相关的两个表。 第一个表如下所示: 第二张表如下所示: 每个品牌将至少具有一个型号,并且每个型号将仅属于一个品牌。 问题是,我应该像这样创建一个联结表吗? 还是我应该修改MODELS表以包括这样的BrandID 谢谢! 问题答案: 如果某个模型仅属于一个品牌,则可以在模型表上将FK放到该品牌上(您的第二种方法)。第一种方法
问题内容: 在Java的JPA中(通过EmbeddedId或IdClass注释)似乎仅对复合数据库键提供第二类支持。当我阅读复合键时,无论使用哪种语言,人们都会碰到它们,因为这是一件坏事。但是我不明白为什么。如今,组合键是否仍然可以使用?如果没有,为什么不呢? 我发现一个同意我的人:http : //weblogs.sqlteam.com/jeffs/archive/2007/08/23/comp
在nextjs项目中,我把后端返回给我的access_token加密之后存储到了cookie里面 然后我设置httpOnly,但是当我想要在客户端axios里面去获得这个token的的时候,我拿不到。 我想要改变一下这个cookie的性质,改成客户端可以访问的。但是我看很多帖子说,这样不安全。 我现在有点犹豫,如果每次取得token还要发个网络请求去获得,那这个性能损失太大了,但是吧,我改成浏览器
现在想象一下我是这样使用的: 我被告知我应该删除,它们永远不能用于生产代码,只能用于测试。那是真的吗?