2010-02-19 1 views
3

Я создаю некоторые графики, которые я хочу обновить в таблице базы данных. Следующей процедурой является:Как загрузить изображение на SQL Server в R

  1. создавать графики как файл png/jpeg.
  2. Прочитайте этот файл как бинарный вектор
  3. SQLUpdate

Мой код для шагов 2 & 3:

pngfile <- file(<filename>, "rb") 
    N <- 1e6 
    repeat{ 
    pngfilecontents <- readBin(pngfile, what="raw", n=N) 
    if(length(pngfilecontents) == N) N <- 5 * N else break 
    } 
    close(pngfile) 

Там есть таблица df_DemandPatternMaster в базе данных с первичным ключом DemandPatternID, с соответствующими запись с использованием значения NULL в поле pngFile.

update.query <- "update df_DemandPatternMaster set " 
    update.query <- paste(update.query, " pngFile = '", serialize(pngfilecontents, NULL) , "' where DemandPatternID = ", , sep="") 
    d <- sqlQuery(connection, update.query) 

В итоге я вставляю только байт данных. Причина в том, что паста видит сериализованный вектор и создает вектор с префиксом & суффикса. Я также попытался прохождения pngfile обращаться непосредственно

pngfile <- file(<filename>, "rb") 
update.query <- paste(update.query, " pngFile = '", pngfile, "' where DemandPatternID = ", , sep="") 

Это также не удается.

Просьба сообщить.

+0

Тесно связанный с этим вопрос: http://stackoverflow.com/questions/2045837/how-to-save-r-plot-image-to-database – Shane

ответ

2

Возможно, если вы свернете вектор pngfilecontents в одну строку. Что-то вроде:

update.query <- "update df_DemandPatternMaster set " 
update.query <- paste(update.query, " pngFile = '", paste(pngfilecontents, collapse="") , "' where DemandPatternID = ", sep="") 
+0

Спасибо Марку. паста (pngfilecontents, collapse = ""). Я не пробовал предложение Дж. Д. Лонга. – 2010-02-22 06:21:49

+0

@ Баан, пожалуйста. Если возможно, отметьте этот ответ, нажав галочку слева. Это очищает оставшиеся без ответа вопросы, и я бы оценил точки репутации :) – Mark

0

Я не пробовал это с базой данных, но в последнее время у меня были некоторые проблемы при сериализации в/из текстового файла. Вот question I asked that might be related. Вы пытались использовать переключатель ascii = T с сериализацией? Затем попробуйте как с rawToChar, так и без него.

У меня нет простой среды для проверки кода, но меня интересует то, что вы придумали. Я работаю над некоторым кодом, где в конечном итоге я буду сериализовать объекты и поместить их в БД. Я просто не до этого.