updateBinaryStream для ResultSet с FileStream - PullRequest
0 голосов
/ 27 апреля 2010

Если я пытаюсь обновить столбец 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 ]

1 голос
/ 28 апреля 2010

С http://support.microsoft.com/kb/945738:

Такое поведение задуманно.

Вот и все. В статье изложены два обходных пути:

Метод 1
Измените запрос, который возвращает набор результатов, или измените конфигурацию базовой таблицы. При этом SQL Server 2000 не преобразует тип курсора.

Метод 2
Вручную создайте операторы для обновления таблицы в SQL Server 2000.

(куча кода здесь)

0 голосов
/ 28 апреля 2010

Я не знаю Java, поэтому я предполагаю, что ваш запрос правильный. Вы убедились, что функция потока файлов правильно настроена на сервере SQL? В частности, в диспетчере конфигурации сервера SQL есть 3 параметра, которые необходимо настроить, они

  • Включить FILESTREAM для Transact-SQL доступ
  • Включить FILESTREAM для ввода / вывода потоковый доступ
  • Разрешить удаленным клиентам иметь потоковый доступ к данным FILESTREAM

Убедитесь, что все они отмечены, и попробуйте снова

...