带有FileStream的ResultSet上的updateBinaryStream

时间:2010-04-27 13:20:40

标签: sql-server jdbc filestream

如果我尝试更新FileStream列,则会出现以下错误:

com.microsoft.sqlserver.jdbc.SQLServerException:结果集不可更新。

代码:

System.out.print("Now, let's update the filestream data.");
FileInputStream iStream = new FileInputStream("c:\\testFile.mp3");
rs.updateBinaryStream(2, iStream, -1);
rs.updateRow();
iStream.close();

为什么会这样?

Sql Server 2008中的表:

CREATE TABLE [BinaryAssets].[BinaryAssetFiles](
    [BinaryAssetFileId] [int] IDENTITY(1,1) NOT NULL,
    [FileStreamId] [uniqueidentifier] ROWGUIDCOL  NOT NULL,
    [Blob] [varbinary](max) FILESTREAM  NULL,
    [HashCode] [nvarchar](100) NOT NULL,
    [Size] [int] NOT NULL,
    [BinaryAssetExtensionId] [int] NOT NULL,

Java中使用的查询:

String strCmd = "select BinaryAssetFileId, Blob 
                 from BinaryAssets.BinaryAssetFiles 
                 where BinaryAssetFileId = 1";
stmt = con.createStatement();
rs = stmt.executeQuery(strCmd);

2 个答案:

答案 0 :(得分:1)

来自http://support.microsoft.com/kb/945738

  

此行为是设计使然。

就是这样。本文概述了两种解决方法:

  

方法1
   更改返回结果集的查询,或更改基础表的配置。执行此操作时,SQL Server 2000不会转换游标类型。

     

方法2
  手动创建语句以更新SQL Server 2000中的表。

     

(这里有一堆代码)

答案 1 :(得分:0)

我不懂java,所以我假设你的查询是对的。您是否确保在SQL Server中正确设置了文件流功能?具体来说,SQL Server配置管理器上有3个需要设置的选项,它们是

  • 为Transact-SQL启用FILESTREAM 访问
  • 为I / O启用FILESTREAM 流媒体访问
  • 允许远程客户端拥有 流式访问FILESTREAM数据

确保勾选所有内容并重试