PreparedStatement.setBlob
方法、PreparedStatement.setBinaryStream
方法以及一些其他的PreparedStatement
方法能够从InputStream
中读取查询所需的数据。很可惜,文档并没有说明在何时数据被读取。它只是简单地说明了:
我可以想到三种可能的解释来说明数据在何时被需要:将会根据需要从流中读取数据,直到达到文件结尾。
- 在调用
setBlob
(或其他具有InputStream
参数的方法)返回之前 - 当语句被执行时
- 当事务提交时
InputStream
(或其他相关InputStream
依赖资源)才是安全的?这是否取决于驱动程序(目前我正在使用MySQL
,但考虑到迁移的可能性,也许了解其他驱动程序如何处理此问题也是好的)。