You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SQL Server存储过程读取图片列报错:The data has been accessed...

问题:访问SQL Server图片列时抛出数据不可用异常

执行存储过程后能获取结果集,但访问特定图片列时抛出如下异常:

com.microsoft.sqlserver.jdbc.SQLServerException: The data has been accessed and is not available for this column or parameter.
    at com.microsoft.sqlserver.jdbc.ServerDTVImpl.getValue(dtv.java:3712) ~[sqljdbc_1.2.jar:?]
    at com.microsoft.sqlserver.jdbc.DTV.getValue(dtv.java:247) ~[sqljdbc_1.2.jar:?]
    at com.microsoft.sqlserver.jdbc.Column.getValue(Column.java:190) ~[sqljdbc_1.2.jar:?]
    at com.microsoft.sqlserver.jdbc.SQLServerResultSet.getValue(SQLServerResultSet.java:2053) ~[sqljdbc_1.2.jar:?]
    at com.microsoft.sqlserver.jdbc.SQLServerResultSet.getValue(SQLServerResultSet.java:2048) ~[sqljdbc_1.2.jar:?]
    at com.microsoft.sqlserver.jdbc.SQLServerResultSet.getStream(SQLServerResultSet.java:2067) ~[sqljdbc_1.2.jar:?]
    at com.microsoft.sqlserver.jdbc.SQLServerResultSet.getBinaryStream(SQLServerResultSet.java:2140) ~[sqljdbc_1.2.jar:?]

解决办法

  • 升级JDBC驱动:当前使用的sqljdbc_1.2.jar版本过旧,存在大字段读取的兼容性问题,直接替换为最新版的Microsoft SQL Server JDBC驱动(如mssql-jdbc-12.x及以上版本)
  • 调整列读取顺序:读取结果集时,先读取所有非大字段列,最后读取图片这类大二进制列,不要跨列读取或优先读取大字段
  • 切换结果集类型:将结果集类型设置为Statement.TYPE_FORWARD_ONLY,避免因可滚动结果集的缓存机制导致数据提前释放
  • 关闭自动提交:在数据库连接中执行conn.setAutoCommit(false),部分场景下自动提交会触发大字段数据的资源回收

内容的提问来源于stack exchange,提问作者sathish kumar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.22 10:52:17